Javascript итерация Json Array для получения значений - PullRequest
0 голосов
/ 02 февраля 2019

У меня ниже JavaScript

var arr = [];
arr.push({0:'Zero'});
arr.push({1:'One'});
console.log(Object.keys(arr));
console.log(Object.values(arr)); //Not getting expected result

Я хочу напечатать ключи и значения отдельно, могу получить ключи, но не могу получить значения.

Ответы [ 4 ]

0 голосов
/ 02 февраля 2019

Если у объектов в массиве есть только один key и один value, то вы можете использовать Object.entries () внутри map () следующим образом:

var arr = [];
arr.push({0:'Zero'});
arr.push({1:'One'});

let keys = arr.map(o => Object.entries(o)[0][0]);
let values = arr.map(o => Object.entries(o)[0][1]);
console.log(JSON.stringify(keys), JSON.stringify(values));

В противном случае вы можете использовать эксперименты flat() или flatMap(), как упоминалось другими, или версию, использующую reduce(), например, такую:

var arr = [];
arr.push({0:'Zero'});
arr.push({1:'One', 2: 'two', 3: 'three'});

let keys = arr.reduce(
    (acc, curr) => acc.concat(Object.keys(curr)),
    []
);

let values = arr.reduce(
    (acc, curr) => acc.concat(Object.values(curr)),
    []
);

console.log(JSON.stringify(keys), JSON.stringify(values));
0 голосов
/ 02 февраля 2019

Здесь вы нажимаете Objects внутри массива, поэтому вам нужно получить к ним доступ, используя индекс.

var arr = [];
arr.push({0:'Zero'})
arr.push({1:'One'})

let values = arr.map((e,index)=> arr[index][Object.keys(e)[0]])
console.log(values)

Примечание на стороне: Обе консоли не работают, замените клавиши на что-то еще, кроме 0 and 1, и посмотритевыход.В случае массива Object.keys вернет индекс массива, который 0, 1 and so on

var arr = [];
arr.push({0:'Zero'})
arr.push({10:'One'})

console.log(Object.keys(arr))

Возможно, именно этого вы и хотели достичь.Если это так, то вам нужно использовать {} ( Object ) вместо [] ( Array )

var arr = {};
arr['0'] = 'Zero';
arr['1'] = 'One';

console.log(Object.keys(arr));
console.log(Object.values(arr))
0 голосов
/ 02 февраля 2019

Вы можете использовать .flatMap, чтобы получить ключи / значения из ваших объектов (в виде массива), а затем сгладить массив в ваш результат:

var arr = [];
arr.push({0: 'Zero'})
arr.push({1: 'One'})

console.log(arr.flatMap(Object.keys));
console.log(arr.flatMap(Object.values));

Однако обратите внимание, .flatMap является экспериментальной технологией и может работать не во всех браузерах.Более того, его функциональность может быть изменена в будущем.Вместо этого, если вы не можете использовать .flatMap и хотите более стабильное решение, вы можете использовать .reduce:

var arr = [];
arr.push({0: 'Zero'});
arr.push({1: 'One'});

console.log(arr.reduce((acc, obj) => [...acc, Object.keys(obj)[0]], []));
console.log(arr.reduce((acc, obj) => [...acc, Object.values(obj)[0]], []));
0 голосов
/ 02 февраля 2019

Это потому, что arr - это массив, а не объект.Вы должны использовать map примерно так:

var arr = [];
arr.push({0: 'Zero'})
arr.push({1: 'One'})
console.log(arr.map(e => Object.keys(e)).flat(1));
console.log(arr.map(e => Object.values(e)).flat(1));

Я использовал flat, чтобы сделать массив плоским, а не вложенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...