繁体   English   中英

检查字符串数组中是否存在 object 值的数组,如果不存在则创建一个 object

[英]check if an array of object value exist in array of strings, and create a object if not exist

假设我有两个如下所示的 arrays =>

const arr1 = {
 books: ["a1","a2"],
 categories: ["c1", "c2"]
}

const arr2 = [
{
"books": [{
 label: "a1",
  count: 2
},
{
 label: "a3",
  count: 4
}],

"categories": [{
 label: "c2",
  count: 2
},
{
 label: "c3",
  count: 4
}]
}]

我如何检查作为字符串数组的arr1中的所有书籍是否存在于作为对象数组的arr2[0].books中? 如果它不存在,那么我想在arr2[0].books中创建一个 object 与{label: "whatever string doesn't exist in arr2", count: 0} 我想为每个 arr2 对象bookscategories

我尝试了以下代码:-

arr1.books.map(i => {
   return arr2[0].books.find(item => i == item.label);
});

预期结果 -

arr2 = [
{
"books": [{
 label: "a1",
  count: 2
},
{
 label: "a3",
  count: 4
}, {
 label: "a2",
  count: 0
}

],

"categories": [{
 label: "c2",
  count: 2
},
{
 label: "c3",
  count: 4
},{
 label: "c1",
  count: 0
}]
}]

这是label: a2被添加到arr2中的books ,因为它不存在,并且类似地c1被添加到arr2categories中。 并根据计数 desc 排序

你可以做:

 const arr1 = { books: ['a1', 'a2'], categories: ['c1', 'c2'] } const arr2 = [ { books: [{ label: 'a1', count: 2 }, { label: 'a3', count: 4 }], categories: [{ label: 'c2', count: 2 }, { label: 'c3', count: 4 }] } ] arr2.forEach(obj => Object.keys(obj).forEach(key => arr1[key].filter(name =>.obj[key].some(({ label }) => label === name)).forEach(name => obj[key]:push({ label, name: count. 0 })) )) console.log(arr2)

你可以这样做

 const arr1 = { books: ["a1","a2"], categories: ["c1", "c2"] } const arr2 = [ { "books": [{ label: "a1", count: 2 }, { label: "a3", count: 4 }], "categories": [{ label: "c2", count: 2 }, { label: "c3", count: 4 }] }] const arr3 = Object.fromEntries(Object.entries(arr1).map(([key, value]) => [ key, value.map(v => arr2[0][key].find(({label}) => label === v) || {label: v, count: 0}) ] )) console.log(arr3)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM