Node JS Map Of Values 如何加起来为 K

How Node JS Map Of Values Adds Up to K

给定一个数字列表 const arr = [{ key1: 10 }, { key2: 5 }, { key3: 7 }, { key4: 17 }]; 和一个数字 k 说 const k = 17;,return 是否列表中的任何两个数字加起来等于 k。例如,给定 [10, 15, 3, 7] 和 k = 17,我们应该 return 正确,因为 10 + 7 =17.

在地图中使用 key,values 编写了以下代码,但似乎无法获得解决方案,任何人都可以建议下面需要更改哪些代码,尤其是使用 Maps[=15= 想要解决]

const arr = [{ key1: 10 }, { key2: 5 }, { key3: 7 }, { key4: 17 }];
const k = 17;
let addInput = new Map(arr.flatMap((x) => Object.entries(x)));

addInput.forEach((v) => {
  for (var i = 0; i < addInput.size; i++) {
    if (v != addInput[i]) {
      if (addInput[i] + v == k) {
        console.log(`${v} + ${addInput[i]} = ${k} (true)`);
      }
    }
  }
});

您的代码中的方法不明确: 您应该使用 Set 删除重复项而不是 Map 并且您应该使用 map 运算符从对象中提取值,您也不能访问具有数字索引的映射运算符,如数组。

const arr = [{ key1: 10 }, { key2: 5 }, { key3: 7 }, { key4: 17 }];
const k = 17;
// using set to remove duplicate
let valueSet = new Set(arr.flatMap((x) => Object.values(x)));

// using array to iterate easily, convert by destruturing
let valueArray = [...valueSet];

valueArray.forEach((v1, i1) => {
  for (let i2 = i1 + 1 ; i2 < valueArray.length; i2++) {
      if ((v1 + valueArray[i2]) === k) {
        console.log(`${v1} + ${valueArray[i2]} = ${k} (true)`);
      }
  }
});