【问题标题】:Filter out dictionary elements with specific key in a nested list过滤掉嵌套列表中具有特定键的字典元素
【发布时间】:2026-02-01 03:40:01
【问题描述】:

我有一个嵌套列表,如下所示:

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 函数过滤掉 data 中的每个 dictionary list 并返回相同的结构但没有 dictionary 其中@987654326 @键存在。

 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 的新手,我被这个简单的任务困住了。

【问题讨论】:

  • 您的要求/问题太复杂了。您只需要一个用于.filter() 回调的函数(命名或匿名)。如果您调用.filter() 的数组存储在另一个数组或对象或某些自定义“事物”中,则无关紧要。它仍然只是一个数组。
  • 只测试.filter()回调中是否存在item属性(return typeof x.item === "undefined"
  • @Andreas return x.item === "undefined"return !(x.item) 会做同样的事情,typeof 检查在这里没用。

标签: javascript node.js list lambda filter


【解决方案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)

【讨论】: