【问题标题】:Take three elements at a time from array从数组中一次取三个元素
【发布时间】:2016-11-12 16:27:43
【问题描述】:

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

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

我需要通过一个返回真或假的函数一次控制三个元素。如果第一个返回 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);

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

谢谢!!

【问题讨论】:

  • 不清楚你在这里要求什么。一旦你把数组分成 3 个元素的集合,你想用它们做什么?请提供示例输入和输出。
  • 您是说您的代码已经可以运行,但是您不喜欢使用ar.slice(0, 3)?是出于性能原因吗? ar.slice()likely the fastest way 复制您的数组的一部分。

标签: javascript arrays cycle


【解决方案1】:

您可以使用带有切片参数的数组并使用 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;
    }
});

【讨论】:

    【解决方案2】:

    这可能就是您所需要的。

    查看下面的演示

    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));
    }

    【讨论】:

      【解决方案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;
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多