Как получить доступ к значениям массива объектов в Javascript - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть возврат массива объектов из метода поиска mongoose.Однако это в следующем формате:

var value = [{'value': {'year': 2018, 'month':3, 'count': 123}}];

Как я могу преобразовать его в ниже:

var value = [{'year': 2018, 'month':3, 'count': 123}];

Я пытался преобразовать ниже, но все равно распечатать исходный формат.

var result = [];
result.push(value);

var arr = [];
Object.keys(result).forEach(function(item) {
     arr.push(result[item]);
     console.log(result[item].year); //undefined
     console.log(result[item]['year']; //undefined
})
console.log(arr);

Ниже приведен метод получения.

       function findStats(result, cb) {
            monthly_order.find({})
            .select('-_id')
            .sort({
                    "_id.year": 1,
                    "_id.month": 1
                })
            .exec(function (err, result) {
                if (err) {
                    console.log('Error find: ', err);
                    return cb(err);
                }
                if(!result){
                    return cb({'message':'No Order.'});
                }else{
                    console.log(result);
                    return cb(null, result);
                    //var arr = result.map(x => x.value); 
                    //console.log(arr);
                    //return cb(null, arr);
                }
            }); 
        }

enter image description here

Использование решения .map () enter image description here

Исходный вывод enter image description here

Ответы [ 4 ]

0 голосов
/ 12 декабря 2018

var value = [{'value': {'year': 2018, 'month':3, 'count': 123}}];
var result = [];
value.map(function(val,i){
  for(var j in val){
    result.push(val[j])
  }
})
0 голосов
/ 12 декабря 2018

Вы хотите изменить каждый элемент массива таким же образом.Это вариант использования для .map().

var value = [{'value': {'year': 2018, 'month':3, 'count': 123}}];

var result = value.map(x => x.value); //For each item (x), get the "value" property
console.log(result);

Код в вашем вопросе возвращает undefined, поскольку result[item] относится к этому:

{'value': {'year': 2018, 'month':3, 'count': 123}}

Как видите, для того, чтобычтобы получить доступ к свойству year, необходимо сначала получить доступ к свойству value:

result[item]["value"]["year"]
0 голосов
/ 12 декабря 2018

Итерация по массиву при любом перемещении значения объекта в новый массив

var value = [{
  'value': {
    'year': 2018,
    'month': 3,
    'count': 123
  }
}];

let newVal = [];
value.forEach(function(item) {
  for (let keys in item) {
    newVal.push(item[keys])

  }
})
console.log(newVal)
How can I convert it to below: var value = [{'year': 2018, 'month':3, 'count': 123}];
0 голосов
/ 12 декабря 2018

Просто .map .value свойства каждого элемента в исходном массиве в новый массив:

var valueArr = [{'value': {'year': 2018, 'month':3, 'count': 123}}];
var newArr = valueArr.map(({ value }) => value);
console.log(newArr);

Обратите внимание, что здесь у вас все еще будет только один объект в памяти - мутации с одним именем переменной приведут к мутациям с другим именем переменной.Если вы хотите избежать этого, распространите объект value в обратном вызове .map:

var valueArr = [{'value': {'year': 2018, 'month':3, 'count': 123}}];
var newArr = valueArr.map(({ value }) => ({ ...value }));
console.log(newArr);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...