【问题标题】:Filter and create a new array [duplicate]过滤并创建一个新数组[重复]
【发布时间】:2019-12-22 16:57:55
【问题描述】:

我有一个对象如下图:

var obj = [
            {id: 1, name: 'AD', key: 10}, 
            {id: 2, name: 'AD', key: 20},
            {id: 3, name: 'BD', key: 30},
            {id: 4, name: 'CD', key: 40}
         ];

我想过滤并创建一个满足任何条件的新数组。例如:过滤名称为“AD”的过滤器并创建一个新的键数组:

[10, 20]

试过.map

obj.map(ele => {
  return ele.name === 'AD' ? ele.key : null;
}); //it adds even nulls in the result array as [10, 20, null, null]

试过.filter:

obj.filter(ele => {
   return ele.name === 'AD' ? ele.key : null;
});

Result: [{id: 1, name: "AD", key: 10}, {id: 2, name: "AD", key: 20}] //gives array of objects, not what I'm expecting.

提前致谢

【问题讨论】:

  • 结合使用这些。 mapfilter 之后

标签: javascript arrays filter


【解决方案1】:

先过滤数组,再映射得到值:

obj.filter(e => e.name === 'AD').map(e => e.key)

另一个选项是平面地图(检查浏览器兼容性here

obj.flatMap(e => e.name === 'AD' ? [e.key] : [])

【讨论】:

    【解决方案2】:

    首先obj 是您代码中的一个数组。 现在解决方案很简单,你先过滤,然后像这样映射:

    obj.filter(item => item.name === 'AD').map(item => item.key);
    

    【讨论】:

      【解决方案3】:

      你可以使用reduce():

      var obj = [{id: 1, name: 'AD', key: 10},{id: 2, name: 'AD', key: 20},{id: 3, name: 'BD', key: 30},{id: 4, name: 'CD', key: 40}];
      
      var result = obj.reduce((acc, cur) => {
        if (cur.name == "AD") acc.push(cur.key)
        return acc;
      }, []);
      
      console.log(result);

      【讨论】:

        【解决方案4】:

        var obj = [
                    {id: 1, name: 'AD', key: 10}, 
                    {id: 2, name: 'AD', key: 20},
                    {id: 3, name: 'BD', key: 30},
                    {id: 4, name: 'CD', key: 40}
                 ];
        
        
        function specialFilter(filt) {
          return obj.filter(el => el.name === filt).map(el => el.key)
        }
        
        console.log(specialFilter("AD"))

        【讨论】:

          猜你喜欢
          • 2022-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-04
          • 2015-03-29
          • 1970-01-01
          • 2022-11-03
          • 2018-10-04
          相关资源
          最近更新 更多