如何在Javascript中访问对象数组值

时间:2018-12-12 02:06:24

标签: javascript arrays object

我有一个从猫鼬查找方法返回的对象数组。但是,其格式如下:

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 :(得分:3)

只需将原始数组中每个项目的.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);对象:

{{1}}

答案 1 :(得分:1)

您正在寻求以相同的方式修改数组的每个元素。这是.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"]

答案 2 :(得分:0)

遍历数组,将对象的值推送到新数组

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}];

答案 3 :(得分:0)

for event in pygame.event.get():
 if event.type == pygame.KEYDOWN:
     if event.key == pygame.K_w:
            print("hi")