javascript - es6过滤并找到相同的对象项

标签 javascript ecmascript-6

我有一个关于使用 ES6 进行过滤的问题:

我有一些数据需要用其他对象过滤

我的数据是:

let data = [
    {
        id: 1,
        names: ['A', 'B']
    },
    {
        id: 2,
        names: ['C']
    }
]

我有另一个对象:

let nameValues = [
    {
        name: 'A',
        selected: false
    },
    {
        name: 'B',
        selected: true
    },
    {
        name: 'C',
        selected: false
    },
    {
        name: 'D',
        selected: true
    }
]

我首先在 selectedNames 中获取 selected == true 项:

let selectedNames = nameValues.filter(function(item) {
    return item.selected
})

我得到的结果是:

selectedNames = [
    {
        name: 'A',
        selected: true
    },
    {
        name: 'D',
        selected: true
    }
]

我需要将它与 data 进行比较,获取 data 中的项目,其中 item.names 具有 selectedNames在里面。

我不需要完全匹配——我需要数据对象中的项目,它们的名称数组中包含我的 selectedNames 对象 name 值:

在这种情况下,我需要得到这样的数据对象结果:

这是一个与我的 selectedNames 不匹配 100% 的项目,但它具有我正在寻找的这些值之一

let data = [
    {
        id: 1,
        names: ['A', 'B']
    },
]

如何使用 es6 做到这一点?

最佳答案

你的做法是对的。我只是将 selectedNames 存储为一个数组以便于查找。

在 data.filter 中,您可以检查 some 名称是否在 selectedNames 数组中可用

let data = [
    {
        id: 1,
        names: ['A', 'B']
    },
    {
        id: 2,
        names: ['C']
    }
]

let nameValues = [
    {
        name: 'A',
        selected: false
    },
    {
        name: 'B',
        selected: true
    },
    {
        name: 'C',
        selected: false
    },
    {
        name: 'D',
        selected: true
    }
]

let selectedNames = nameValues.filter(item => item.selected).map(x => x.name);

let result = data.filter(obj => obj.names.some(name => selectedNames.includes(name)));

console.log(result);

关于javascript - es6过滤并找到相同的对象项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58325713/

相关文章:

javascript - 使用 javascript 更改 DIV 文本

javascript - 如何使用 ES6 模块语法(解构)导入属性?

javascript - 如何仅将对象属性子集的值复制到 TypeScript 中的另一个现有对象

javascript - 使用动画将一系列 div 向左移动

php - 如何使用php脚本删除目录中的文件

javascript - 如何在 JavaScript 类中编写生成器?

javascript - 为什么我的超时要等到等待完成后,但我的日志却没有?

Javascript 引用与绑定(bind)……有什么区别?

javascript - PHP:如何使用unicode字符将文件写入磁盘

javascript - Redis数据操作