我有两个数组
let a1 = [{id: 1, name: "terror"}, {id: 2, name: "comics"}, {id: 3, name: "suspense"}]
let a2 = [{id: 1, name: "terror"}, {id: 3, name: "suspense"}]
我需要将这些数组相互比较,并得出类似这样的结果: [{id:1,名称:"恐怖",已选择:true},{id:2,名称:"漫画",已选择:false},{id:3,名称: "悬疑",已选择:true}]
我尝试使用下面的filter
,但它没有用,我该怎么办?
a2.filter(data => {
return a1.find(value => {
let x = data.id === value.id ? {
id: value.id,
text: value.name,
selected: true
} : {
id: data.id,
text: data.name,
selected: false
}
})
})
答案 0 :(得分:1)
您不应该使用map
因为您需要一个与您开始时具有相同数量的项目的输出数组 - 而是使用a2
创建一个具有相同数量元素的新数组作为原始数组,只进行了转换。
由于看起来map
没有任何新信息,并且只有通过显示某些对象的存在或 abscence 才有用,复杂程度较低的是a2
Set
到id
a1
个,然后通过迭代id
生成新对象并检查它们是否Set
{1}}位于let a1 = [{id: 1, name: "terror"}, {id: 2, name: "comics"}, {id: 3, name: "suspense"}]
let a2 = [{id: 1, name: "terror"}, {id: 3, name: "suspense"}]
const a2IDs = new Set(a2.map(({ id }) => id));
const output = a1.map((item) => ({ ...item, selected: a2IDs.has(item.id) }));
console.log(output);
:
.filter
可以修改您的代码以使其有效,将.map
更改为.find
并使用a2
,但它会更复杂,因为它'每次必须迭代Set
中的项目(通过比较O(1)
查找JavaPairRDD<String, String> textFiles = sc.wholeTextFiles(PATH);
)。