如何在数组中获取对象的prpety值数组

时间:2017-06-28 10:07:26

标签: javascript arrays

我们如何返回一组对象的属性值?

[
    { id: 1, category: 'A'   },
    { id: 2, category: 'A'   },
    { id: 3, category: 'C'   },
    { id: 4, category: 'B'   },
    { id: 5, category: 'A'   },
]

我想获得所有类别=' A' [1, 2, 5]并使用.map()包含一个我不喜欢的未定义对象,过滤器返回整个对象而不是id。

使用.map()输出:[1, 2, undefined, undefined, 5]

使用.filter()输出:

[
    Object {
       category: 'A',
       id: 1
    },
    Object {
       category: 'A',
       id: 2
    },
    Object {
       category: 'A',
       id: 5,
    },
]

DEMO

3 个答案:

答案 0 :(得分:2)

一种选择是使用Array#filter然后使用Array#map



var data = [{"id":1,"category":"A"},{"id":2,"category":"A"},{"id":3,"category":"C"},{"id":4,"category":"B"},{"id":5,"category":"A"}];

var result = data.filter(function(item) {
  return item.category === 'A';
}).map(function(item) {
  return item.id;
});

console.log(result);




另一种选择是使用Array#reduce



var data = [{"id":1,"category":"A"},{"id":2,"category":"A"},{"id":3,"category":"C"},{"id":4,"category":"B"},{"id":5,"category":"A"}];

var result = data.reduce(function(items, item) {
  item.category === 'A' && items.push(item.id);
  
  return items;
}, []);

console.log(result);




答案 1 :(得分:1)

您可以在一个循环中使用Array#reduce

var array = [{ id: 1, category: 'A'   }, { id: 2, category: 'A'   }, { id: 3, category: 'C'   }, { id: 4, category: 'B'   }, { id: 5, category: 'A'   }],
    category = 'A',
    result = array.reduce(function (r, o) {
        if (o.category === category) {
            r.push(o.id);
        }
        return r;
    }, []);

console.log(result);

答案 2 :(得分:0)

您可以将filter()map()

组合在一起

var data = [{ id: 1, category: 'A'   }, { id: 2, category: 'A'   }, { id: 3, category: 'C'   }, { id: 4, category: 'B'   }, { id: 5, category: 'A'   }]

var new_data_filter = data.filter(function(item) {
  if (item.category === 'A') {
      return item.id
  }
}).map(function(a){return a.id})
console.log(new_data_filter)

适用于ES6

var new_data_filter = data.filter(item => item.category === 'A').map(a => a.id)