【问题标题】:Filter an object with key and value pair with an array using javascript使用 javascript 使用数组过滤具有键和值对的对象
【发布时间】:2020-03-02 07:16:41
【问题描述】:

我有一个数据架构

let data = [{
    "Count": {
        "Grapes": 1,
        "Banana": 6,
    }
}]

我需要从数组“结果”中过滤对象“计数”的数据

let result = ["Banana"]

得到一个输出

let output = {"Banana": 6}

我将如何使用 javascript 实现这一目标 我试过了

let output = data[0]["Count"].filter( i => result.includes( data[0]["Count"] ));

【问题讨论】:

  • 我建议查看 Array.prototype.filter() 上的 MDN 文档和类似的方法(map、reduce),并让我们知道您尝试了什么以及什么不起作用。

标签: javascript arrays object filter


【解决方案1】:

这一个班轮:

const filtered = Object.fromEntries(Object.entries(data[0]["Count"]).filter(([k]) => result.includes(k))) 

支持 ES5:

const filtered  = Object.keys(data[0]["Count"]).filter(k => result.includes(k)).reduce((acc, k) => (acc[k] = data[0]["Count"][k], acc), {})

演示:

let data = [{
    "Count": {
        "Grapes": 1,
        "Banana": 6,
    }
}]


let result = ["Banana"]

const filtered = Object.fromEntries(Object.entries(data[0]["Count"]).filter(([k]) => result.includes(k))) 

const filteredES5  = Object.keys(data[0]["Count"]).filter(k => result.includes(k)).reduce((acc, k) => {acc[k] = data[0]["Count"][k]; return acc}, {})


console.log(filtered);
console.log(filteredES5);

【讨论】:

  • 感谢@cthmsst...但仅适用于最新的 ES.with es5 它不会工作
  • 用 ES5 支持更新了我的示例
【解决方案2】:

这将适用于您的价值观:

result.map(item => data[0].Count[item])

如果您想要键值并删除未定义的值:

result.map(item =>{return  data[0].Count[item] ? {[item] : data[0].Count[item]} : undefined} ).filter(item => item != undefined)

【讨论】:

  • 如果Count中不存在项目,它将为'Banana'[ undefined ]返回[6]
  • 要删除数组,您可以使用reduce 并防止在未定义时创建新密钥:result.reduce((acc, k) => data[0].Count[k] ? (acc[k] = data[0].Count[k], acc) : acc, {})
  • 是的,或者你可以做 result.map(item =>{return data[0].Count[item] ? {[item] : data[0].Count[item]} : undefined} ).filter(item => item != undefined);删除未定义的值。
  • 是的,但您仍然拥有[ { Banana: 6 } ] 而不是{ Banana: 6 }
猜你喜欢
  • 1970-01-01
  • 2020-06-23
  • 2018-10-07
  • 2015-04-19
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
相关资源
最近更新 更多