2016-11-12 76 views
0

我有九個元素組成的陣列:採取在同一時間三個要素從陣列

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

我需要返回一個true或false一個功能來控制在同一時間三個要素。如果第一個返回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); 

我該如何簡化這個過程?避免創建一個多陣列。

謝謝!

+0

目前還不清楚你問什麼在這裏。一旦你把這個陣列分解成3個元素,你想用它們做什麼?請提供一個示例輸入和輸出。 – Damon

+0

你是說你的代碼_already工作_,但你_dislike_使用'ar.slice(0,3)'?這是出於性能原因嗎? 'ar.slice()'[可能是最快的方法](http://stackoverflow.com/a/20547803/5257399)複製你的數組的一部分。 – Birchlabs

回答

1

你可以使用一個數組的切片paramters與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; 
 
    } 
 
});
迭代

0

可能這就是你需要的。

檢查從下面的例子

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

0

這聽起來像一些你想要的各種迭代器。一個明顯的例子是這樣的:

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

相關問題