如何比较2个数组的相同值,并使用true或false标志将它们保存到第3个数组 [英] How to compare 2 arrays for same value and save them to 3rd array with true or false flags

查看:55
本文介绍了如何比较2个数组的相同值,并使用true或false标志将它们保存到第3个数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个数组:

var arr1 = [{name:"Option1"},{"name":"Option2"},{"name":"Option3"},{"name":"Option4"},{"name":"Option5"},{"name":"Option6"},{"name":"Option7"},{"name":"Option8"},{"name":"Option9"},{"name":"Option10"}]

var arr2 = [{"name": "Option 2"},{"name": "Option 4"},{"name": "Option 6"},{"name": "Option 8"},{"name": "Option 10"}]

我希望实现的是第三个数组,其中包含来自arr1的所有值,并带有附加标记已标记":true (如果在arr2中找到该值)ELSE 已标记";:假

What I wish to achive is that a 3rd array with all the values from arr1 with additional flag of "marked":true if that value is found in arr2 ELSE "marked": false

我尝试了arry方法的各种组合,例如map(),filter(),forEach(),但是以某种方式无法弄清楚如何在不重复值或重复条目的情况下正确返回.

I tried a various combination of arry methods such as map(), filter(), forEach() but somehow not able to figure out how to return properly without repeating the values or making duplicate entries.

**我看到的是我的内部和外部循环都执行了两个语句,并且以某种方式错过了返回真/假逻辑,最终以等于arr2长度的时间重复了我的循环.**

** What I see is that my inside and outside loop both statements are executed and I somehow miss the return true / false logic and end up repeating my loop the number of time equal to the length of arr2. **

function test() {
  var arr1 = [{
      name: "Option1"
    },
    {
      "name": "Option2"
    },
    {
      "name": "Option3"
    },
    {
      "name": "Option4"
    },
    {
      "name": "Option5"
    },
    {
      "name": "Option6"
    },
    {
      "name": "Option7"
    },
    {
      "name": "Option8"
    },
    {
      "name": "Option9"
    },
    {
      "name": "Option10"
    }
  ]
  var arr2 = [{
      "name": "Option2"
    },
    {
      "name": "Option4"
    },
    {
      "name": "Option6"
    },
    {
      "name": "Option8"
    },
    {
      "name": "Option10"
    }
  ]
  arr1.forEach((el) => {
    arr2.forEach((el2) => {
      if (el.name.toString() === el2.name.toString()) {
        return console.log("Printing from inside the if loop", el)
      }
      console.log("Printing from outside the if loop", el)
    })
  })
}
test()

推荐答案

首先将arr2中的所有比较值(名称)映射到

Start by mapping all the comparison values (name) from arr2 into a Set.

然后映射 arr1 来创建新数组并在arr2 Set中查找每个名称

Then map arr1 to create the new array and lookup each name in the arr2 Set

const arr2Names = new Set(arr2.map(e => e.name));

const res = arr1.map(e => ({...e, marked: arr2Names.has(e.name)}));

console.log(res)

<script>
var arr1=[{name:"Option1"},{name:"Option2"},{name:"Option3"},{name:"Option4"},{name:"Option5"},{name:"Option6"},{name:"Option7"},{name:"Option8"},{name:"Option9"},{name:"Option10"}],
arr2=[{name:"Option2"},{name:"Option4"},{name:"Option6"},{name:"Option8"},{name:"Option10"}];
</script>

这篇关于如何比较2个数组的相同值,并使用true或false标志将它们保存到第3个数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆