一次从数组中取三个元素

Take three elements at a time from array

本文关键字:元素 三个 数组 一次      更新时间:2023-09-26

我有一个由9个元素组成的数组:

var ar = ['a','a','a','a','a','a','a','a','a'];

我需要通过一个返回true或false的函数一次控制三个元素。如果第一个语句返回true,则其他语句不必执行即可获得一个true结果。

var one = fun(ar.slice(0, 3));
if (one != false) document.write(one);
var two = fun(ar.slice(3, 6));
if (two != false) document.write(two);
var three = fun(ar.slice(6, 9));
if (three != false) document.write(three);

我怎样才能简化这个过程?为了避免创建多数组。

谢谢! !

您可以使用带有切片参数的数组并迭代Array#some

function fun(array) {
    return array.reduce(function (a, b) { return a + b; }) > 10;
}
var ar = [0, 1, 2, 3, 4, 5, 6, 7, 8];
[0, 3, 6].some(function (a) {
    var result = fun(ar.slice(a, a + 3));
    if (result) {
        console.log(a, result);
        return true;
    }
});

可能这就是你需要的

查看下面的演示

var ar = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm'];
for(var i = 0; i < ar.length; i+=3){
  console.log(ar.slice(i, i+3));
}

听起来像是需要某种类型的迭代器。一个显式的例子是这样的:

var input = [0, 1, 2, 3, 4, 5, 6, 7, 8];
// console.log(checkChunks(input, 2, checkChunkSum(10)));
console.log(checkChunks(input, 3, checkChunkSum(10)));
function checkChunks(arr, chunkLength, checker) {
  var startIndex = 0;
  var chunk;
  while ((chunk = arr.slice(startIndex, startIndex += chunkLength)).length) {
    var result = checker(chunk);
    console.log('Checking chunk: ', chunk);
    if (result !== false) {
      return {
        chunk: chunk,
        result: result
      };
    }
  }
  
  return false;
}
function checkChunkSum(max) {
  return function checkSum(arr) {
    return arr.reduce(sum, 0) > max;
  }
}
function sum(a, b) {
  return a + b;
}