确定如果语句返回true Javascript,数组的哪个元素将生成

确定如果语句返回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

我不知道该用谷歌搜索什么。 我有一个数组,还有5个数字需要添加。我想看看是否有任何元素可以乘以y得到x。(如果可能,返回使if语句为真的元素索引)

//除单个元素外,所有元素都最像“every”


//很抱歉这个蹩脚的问题

最初我以为使用
数组。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");