首页 > 解决方案 > 在Javascript中获取两个数组对象的差异

问题描述

我正在尝试获取“colors”中但不在“colors2”中的项目并显示它们,但我总是得到第一个数组的所有项目

let colors = [
    { key: "green", value: '#00b894' },
    { key: "lgreen", value: '#64ed9f' },
    { key: "yellow", value: '#edc611' },
    { key: "orange", value: '#fda044' },
    { key: "red", value: '#e74c47' }
]

let colors2 = [
    { key: "Option 1", value: "#00b894" },
    { key: "Option 2", value: "#e74c74" }
]

comparer = (otherArray) =>{
   return function (current) {
      return otherArray.filter(function (other) {
         return other.value !== current.value
      })
   }
 }

至于输出,我得到了颜色数组的所有项目。相反,我想显示 lgreen、yellow 和 orange,其值与 colors2 数组中的项目不同。

输出 :

Array [Object { key: "green", value: "#00b894" }, Object { key: "lgreen", value: "#64ed9f" }, Object { key: "yellow", value: "#edc611" }, Object { key: "orange", value: "#fda044" }, Object { key: "red", value: "#e74c47" }]

标签: javascriptarraysobject

解决方案


使用filter()some()

let colors1=[{key:"green",value:"#00b894"},{key:"lgreen",value:"#64ed9f"},{key:"yellow",value:"#edc611"},{key:"orange",value:"#fda044"},{key:"red",value:"#e74c47"}],colors2=[{key:"Option 1",value:"#00b894"},{key:"Option 2",value:"#e74c74"}];

let result = colors1.filter(color1 => {
    return !colors2.some(color2 => color1.value === color2.value)
})

console.log(result)


推荐阅读