首页 > 解决方案 > 用乘法 256 javascript 在数组中查找数字对

问题描述

我想在数组中找到成对的数字a ba * b = 256返回[128, 2, 4, 16, 2, 128, 64, 4, 7, 4, 64]它们的索引。但是我想消除重复项,例如,如果结果已经包含,0 10 4不应添加,因为它们都代表128*2

预期输出是两对索引,一对为128 * 2,一对为64 * 4,例如0 1, 6 7

let arr = [128, 2, 4, 16, 2, 128, 64, 4, 7, 4, 64];
let a = [];
for (let i = 0; i < arr.length; i++) {
  for (let j = i + 1; j < arr.length; j++) {
    if (arr[i] * arr[j] === 256) {
      console.log(arr[i], arr[j]);
    }
  }
}

标签: javascriptarraysfor-loop

解决方案


您可以使用双 for 循环

第一个i0length - 1
第二个从i + 1数组的末尾

这样你就可以得到所有可能的组合

然后要检查重复项,您可以使用Array.prototype.some来检查是否已经有一对 say128 22 128

编辑

我将您循环对象的方式更改为0 1, 1 2, 2 3 ... 0 2, 1 3, ...按要求

const data = [128, 2, 4, 16, 2, 128, 64, 4, 7, 4, 64];
const result = [];

for (let i = 0; i < data.length - 1; i++) {
  for (let j = i + 1; j < data.length; j++) {
    if (data[j-i-1] * data[j] == 256) {
      if (!result.some(x =>
          (data[x[0]] == data[j-i-1] && data[x[1]] == data[j]) ||
          (data[x[1]] == data[j-i-1] && data[x[0]] == data[j]))) {
        result.push([j-i-1, j]);
      }
    }
  }
}

result.forEach(x => console.log(x[0], x[1]))


推荐阅读