Подтвердить что ты не робот

Список кортежей в Javascript

Скажем, я получаю строку JSON, содержащую информацию о людях. Теперь я просматриваю все объекты JSON и извлекаю имя и возраст или каждый человек.

Как я могу хранить их как кортежи в списке для дальнейшей обработки? (Например, другой функцией)

4b9b3361

Ответ 1

Предполагая, что входящий JSON выглядит примерно так:

var incomingList = [{
  "name": "Homer Simpson",
  "age": 45,
  "occupation": "Nuclear Plant Technician",
    ...
},{
  "name": "Marge Simpson",
  "age": 44,
  "occupation": "Homemaker",
    ...
},
  ...
]

Вы можете извлечь имя и возраст только в аналогичный массив объектов:

var nameAndAgeList = incomingList.map(function(item) {
  return {
    name: item.name,
    age: item.age
  };
});

JavaScript имеет только объекты и массивы, а не кортежи. Если ваши данные ассоциативны (каждая запись имеет пары ключ-значение с именем поля в качестве ключа), то вышеуказанный подход будет работать нормально.


Однако, если вам нужно связать имена и возрасты в одном объекте в виде пар ключ-значение (например, ассоциативный массив) с именами как ключами и возрастами как значения, будет работать следующее (при условии, что имена уникальны)

var namesAndAges = incomingList.reduce(function(result,item) {
  result[item.name] = item.age;
  return result;
},{});

Ответ 2

Что бы вы не перекодировали строку JSON в объект. JSON поддерживается в javascript, в конце концов, это * J * ava * S * cript * O * bject * N * otation.

Предположим, что у вас есть строка json -

"[{name:john,place:usa,phone:12345},{name:jim,place:canada,phone:54321}]"

Вы можете преобразовать в объект js с помощью

var persons = JSON.parse("[{name:john,place:usa,phone:12345},{name:jim,place:canada,phone:54321}]");

Теперь вы можете получить доступ к нему следующим образом: зацикливание всех кортежей/записей -

for (var i=0;i<persons.length;i++) {
   var person = persons[i];
   var name = person.name;
   var place = person.place;
   var phone = person.phone;
}

Ответ 3

На основе ответа Викрама, поскольку вы специально запросили кортежи, следующее возвращает массив массивов - другими словами, список кортежей.

var parsed = JSON.parse('[{"name":"john", "place":"usa", "phone":"12345"},{"name":"jim", "place":"canada", "phone":"54321"}]');

var people = [];
for (var i=0; i < parsed.length; i++) {
   var person = [parsed[i].name, parsed[i].place, parsed[i].phone];
   people.push(person);
}

Ответ 4

JS не имеет типа "кортежа". (см. Назначения переменных JavaScript из кортежей)

Вы можете либо создать свой собственный кортеж-класс, либо просто использовать массив длиной 2 (поэтому вы получите массив массивов длиной 2)

Ответ 5

Если по кортежу вы имеете в виду что-то вроде упорядоченной пары, вы можете иметь объект с именем атрибута как "имя" человека и значение как "возраст" человека.

Вот так:

var tupleObj = {};
for (var i in jsonObj) {
    tupleObj[jsonObj[i].name] = jsonObj[i].age;
}