0

我已经搜索过,但没有找到我需要的确切技巧。

我正在尝试比较具有相同键的 2 个对象数组,如果 arr2 中的值不同,则更新 arr1。是一个可以玩的代码笔。

let arr1 = [{val1: "dog", val2: "friendly"},{val1: "cat", val2: "fluffy"}]

let arr2 = [{val1: "cat", val2: "evil"},{val1: "mouse", val2: "tiny"},{val1: "hippo", val2: "big"}]

该函数的预期结果应该是更正arr1 中包含val1:"cat"的对象:

 {val1: "cat", val2: "fluffy"} ----->  {val1: "cat", val2: "evil"}

并且更新后的 arr1 应该像这样返回:

{val1: "dog", val2: "friendly"}, { val1: "cat", val2: "evil"}

诀窍是,代码也应该双向工作。例如,如果 arr1 中有 {val1: "big", val2: "puma"},它会通过替换 "puma" 更改为 {val1: "big", val2: "hippo"},因为值 "big"与 arr2 中的“河马”相关联。

关于如何实现这一目标的任何想法?谢谢!

4

2 回答 2

1

尝试以下功能 - 这将满足 arr1

function validateArray() {
        arr2.forEach(function(arr2Element) {
            arr1.forEach(function(arr1Element) {
                if (arr2Element.val1 === arr1Element.val1) {
                    arr1Element.val2 = arr2Element.val2;
                } else if (arr2Element.val2 === arr1Element.val1) {
                    arr1Element.val2 = arr2Element.val1;
                }
            });
        });
        console.log(arr1);
    }
于 2020-01-24T06:32:42.560 回答
0

循环遍历 arr2 项。对于每个项目,循环 arr1 以查找具有相同 val1 的项目,如果找到:将其值设置为 arr2 项目的值。

let arr1 = [
    {
    val1: "dog",
    val2: "friendly"
  },
  {
    val1: "cat",
    val2: "fluffy"
  }
];

let arr2 = [{
  val1: "cat",
  val2: "evil"
},

{
  val1: "mouse",
  val2: "tiny"
},

{
  val1: "hippo",
  val2: "big"
}
];

function validate() {
  arr2.forEach(function(v2) {
     arr1.forEach(function(v, idx) {
      if (v2.val1 == v.val1) {
        console.log('Change', v.val2, 'to', v2.val2);
        arr1[idx].val2 = v2.val2;
      }
    });
  });
}
<button id="validate" onclick="validate()">
Validate
</button>

对于较大的数组,这会产生一些开销,因此您可能希望对 arr1 使用不同的结构(例如使用 val1 作为键),我认为这会使它更简单。

于 2020-01-24T00:57:42.100 回答