确定如果语句返回true Javascript,数组的哪个元素将生成
我不知道该用谷歌搜索什么。 我有一个数组,还有5个数字需要添加。我想看看是否有任何元素可以乘以y得到x。(如果可能,返回使if语句为真的元素索引) //除单个元素外,所有元素都最像“every”确定如果语句返回true Javascript,数组的哪个元素将生成,javascript,arrays,Javascript,Arrays,我不知道该用谷歌搜索什么。 我有一个数组,还有5个数字需要添加。我想看看是否有任何元素可以乘以y得到x。(如果可能,返回使if语句为真的元素索引) //除单个元素外,所有元素都最像“every” //很抱歉这个蹩脚的问题最初我以为使用数组。some()会有帮助,但正如下面提到的-some()用于返回布尔值,不应用于返回任何其他内容。与我的同事Dan合作-我们发现使用array.findIndex()可以帮助我们解决这个问题 let input=[5,35,6,7,8]; 设x=24; 设y=4
//很抱歉这个蹩脚的问题最初我以为使用
数组。some()
会有帮助,但正如下面提到的-some()
用于返回布尔值
,不应用于返回任何其他内容。与我的同事Dan合作-我们发现使用array.findIndex()
可以帮助我们解决这个问题
let input=[5,35,6,7,8];
设x=24;
设y=4;
让乘法=(x,y)=>number=>number*y==x;
让index=input.findIndex(乘以(x,y));
控制台日志(索引)代码>如果您使用该函数,它非常简单
function mult(y, x) {
return function mult(element, index, array) {
return element * y === x;
}
}
[2, 5, 8, 1, 4].some(mult(10, 50)); //True since 5 * 10 = 50
[2, 5, 8, 1, 4].some(mult(10, 100)); //False since [none of elements] * 10 = 100
const result = arr.map(by7Is49); // [ false, false, false, true, false ]
警告:上面的示例使用
您可以使用上述功能通过以下方式仅提取正确的条目:
您还可以利用上述功能通过以下方式获取解决问题的方法:
您甚至可以更进一步,只通过以下方式获取符合您标准的指标:
可以使用forEach获取符合条件的所有元素:
const arr = [12,59,42,53,6];
const x = 24;
const y = 4;
arr.forEach(function(item, index){
if(item * y === x) {
console.log(item, index);
}
});
其中一种方法是编写一个通用函数,返回另一个可以在计算中使用的函数
multiplyByNumIsResult
接受y
和r
的参数(您的结果),并返回另一个接受x
的函数x
是要检查的数组元素
const multiplyByNumIsResult = (y, r) => {
return (x) => {
return x * y === r;
}
}
这允许您根据调用multiplyByNumIsResult
的方式创建具有特定名称的新函数。这里有一个名为by7Is49
const by7Is49 = multiplyByNumIsResult(7, 49);
另一个函数可以是3is9的:
const by3Is9 = multiplyByNumIsResult(3, 9);
您基本上只是使用通用功能作为工厂来制作新的定制功能
const arr = [1, 3, 5, 7, 9];
如果使用map
,则可以返回一个新数组,该数组提供使用函数检查每个元素的结果
function mult(y, x) {
return function mult(element, index, array) {
return element * y === x;
}
}
[2, 5, 8, 1, 4].some(mult(10, 50)); //True since 5 * 10 = 50
[2, 5, 8, 1, 4].some(mult(10, 100)); //False since [none of elements] * 10 = 100
const result = arr.map(by7Is49); // [ false, false, false, true, false ]
虽然这会给你一个不错的结果,但它可能会更好
如果稍微更改常规函数,可以得到更好的结果—一个只包含满足条件的索引的数组
const multiplyByNumIsResult = (y, r) => {
return (p, c, i) => {
if (c * y === r) p.push(i);
return p;
}
}
const result2 = arr2.reduce(by7Is49, []); // [ 3 ]
所以我们实际上只需要检查这个数字(ArrayElem)是否在那个数组中。为此,我们可以使用包括:
var array=[1,2,3,4],
x=8,y=2;
if(array.includes(x/y)) alert("wohoo");//wohoo as 4*2=8
获取其索引很容易:
array.indexOf(x/y) //3 as array[3] =4
最佳(关于性能)实际上是一套:
var set = new Set(array);
if(set.has(x/y)) alert("wohoo");
有很多方法可以做到这一点。甚至可以在一个简单的for()
循环中完成。向我们展示您所做的尝试,并提供一个示例,也许您可以添加关于您到底想要什么的伪代码。您希望新元素通过什么条件?您正在寻找。不,您需要使用循环来完成。如果两者都需要,您应该只使用标准的for
循环。如果只需要第一个索引,使用此选项可以提前退出循环并保存不必要的计算。您需要从some
回调返回布尔值。我明白您的意思。我已经编辑了我的代码。
array.indexOf(x/y) //3 as array[3] =4
var set = new Set(array);
if(set.has(x/y)) alert("wohoo");