javascript - 用乘法 256 javascript 在数组中查找数字对
问题描述
我想在数组中找到成对的数字a b
并a * b = 256
返回[128, 2, 4, 16, 2, 128, 64, 4, 7, 4, 64]
它们的索引。但是我想消除重复项,例如,如果结果已经包含,0 1
则0 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]);
}
}
}
解决方案
您可以使用双 for 循环
第一个i
从0
到length - 1
第二个从i + 1
数组的末尾
这样你就可以得到所有可能的组合
然后要检查重复项,您可以使用Array.prototype.some来检查是否已经有一对 say128 2
或2 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]))
推荐阅读
- javascript - 检查用户是否登录 PrivateRoute 组件 React
- python - 展平字典
进入一个综合列表 - scala - 查找列表中包含对象的选项值的平均值
- python - 在循环中同时弹出字典中的键和值
- python - Python正则表达式:多行模式匹配两个以上的子字符串
- tfs - 工作项更改时自动刷新积压工作面板
- c# - \n asp.net core mvc 中的换行符不适用于最后一个字符串单词
- javascript - 无法读取“for...of”循环中的第一次迭代/迭代为空
- c++ - c++ 两个线程,共享几个整数变量
- python - Django 从模型字段计算平均值并存储在另一个模型中