如果我需要 JS 中第一个循环的结果,如何避免运行两个循环

问题描述

我在 Javascript 中有一个数组,我需要对数组进行 for 循环以找到最小整数,结果需要遍历所有值。 例如:[1,2,3,4,5]

然后我需要使用这个整数在这个数组中做另一个操作。所以我需要再次执行 for 循环,并执行以下操作:if(i === 1){ //do something }。问题是我无法在第一个循环中执行此操作,因为在执行进一步操作之前我需要遍历它们。

那么,问题是,如何避免在 javascript 中编写两个循环而不是一个循环?

解决方法

在给定数据的注释中,您可以使用单个循环减少数组并选择具有最小 key 值的对象。

这仅对未排序的数组或排序未知的数组有意义。

var array = [{ key: "1",value: "apple" },{ key: 2,value: "orange" },{ key: "3",value: "lemon" }],min = array.reduce((a,b) => +a.key < +b.key ? a : b);

console.log(min.value);

,

没有通用的答案可以用来避免“循环两次”。有些问题可能只需要您这样做。但是,对于您的特定问题,可以在一个循环中解决。这是一个非常简单的例子。

let arr = [
  {
    "key": "1","value": "apple"
  },{
    "key": "2","value": "orange"
  },{
    "key": "3","value": "lemon"
  }
];

let minObj = arr[0];
for (let i = 1; i < arr.length; i++) {
  if (+minObj.key > +arr[i].key) {
    minObj = arr[i];
  }
}
console.log(minObj);

当然有很多方法可以做到这一点。

,

问题是我无法在第一个循环中执行此操作,因为在执行进一步操作之前我需要遍历它们。

你说得对。由于您必须遍历数组,因此无法同时执行;

  • 一次确认最小值是多少
  • 再次遍历每个最小值

这是一个示例,显示了每个必需的循环和我们将所有最小值设置为 0 的突变

const getMin = (arr) => Math.min(...arr) // First loop
const mutateArrValues = (arr,value,mutation) => arr.map(ent => {
  if (ent === value) {
    return mutation(ent)
  }
  return ent
}) // Second loop

const exampleArr = [3,5,1,8,2,1]

const min = getMin(exampleArr)
const mutatedArr = mutateArrValues(exampleArr,min,(v) => 0)

console.log('min = ',min)
console.log('mutatedArr = ',mutatedArr)