用嵌套列表中的特定键过滤出字典元素

时间:2019-11-03 13:41:09

标签: javascript node.js list lambda filter

我有一个嵌套的列表,看起来像:

var data = [[
    {item: 'top_X', pos:1},
    {name: 'person1', value: 1},
    {name: 'person2', value: 1}
],[
    {item: 'top_Y', pos:1},
    {name: 'person1', value: 2},
    {name: 'person2', value: 2}
],[
    {item: 'top_Z', pos:1},
    {name: 'person1', value: 1}
] ];

js中,我尝试使用lambda函数来过滤掉dictionary list 中的每个data,并返回相同的结构,但不包含dictionary,其中有item键。

 all = data.map(x => {
        return x; // returns the whole list
    });

    //
    fileredOutList = data.map(x => {
       return x.filter  ?? ..
    }); // Expected output list: 
 //      data = [[{name: 'person1', value: 1},
 //              {name: 'person2', value: 1}],
 //             [{name: 'person1', value: 2},
 //              {name: 'person2', value: 2}],
 //             [{name: 'person1', value: 1}]]


fileredOutListCount = data.map(x => {
   //  return x.filter  ?? .. .count()
   // return count elements after filter --> 3
});

如何构建内联函数以过滤子列表,并在过滤后返回另一个(过滤的)列表和/或count

对于这个简单的问题很抱歉,我是JS的新手,并且对这个简单的任务感到困惑。

1 个答案:

答案 0 :(得分:1)

您可以使用Object.prototype.hasOwnProperty进行过滤,以过滤出具有item属性的对象。

var data = [[
    {item: 'top_X', pos:1},
    {name: 'person1', value: 1},
    {name: 'person2', value: 1}
],[
    {item: 'top_Y', pos:1},
    {name: 'person1', value: 2},
    {name: 'person2', value: 2}
],[
    {item: 'top_Z', pos:1},
    {name: 'person1', value: 1}
] ];


let out = data.map(arr => arr.filter(e => !e.hasOwnProperty('item')));
console.log(out)