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

问题描述 投票:0回答:1

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

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的新手,但我仍然坚持这个简单的任务。

javascript node.js list lambda filter
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.