2016-12-10 42 views
0

我有這種形式的數據[1,2,3,4]。我想對這個數組執行一些操作,這樣我會得到像這樣的輸出[1,2,3,4, 4,3,2,1, 1,2]。請你能提供一些方法來達到這個目的嗎?重複數組在上下有一些限制

// function declaration 

function arrayExm(array,limit){ 
    // want some operations here so that i will get this output 
} 

//function execution 

arrayExm([1,2,3,4],10) 
//so it will return [1,2,3,4, 4,3,2,1, 1,2] 

回答

3

您可以使用簡單的for循環來實現它。

function arrayExm(array, limit) { 
 
    var res = [], 
 
    len = array.length; 
 

 
    // iterate upto the limit 
 
    for (var i = 0; i < limit; i++) { 
 
    // define the value based on the iteration 
 
    res[i] = Math.floor(i/len) % 2 == 0 ? // check the array element repetition is odd or even 
 
     array[i % len] : // if even define element in same order 
 
     array[len - i % len - 1]; // if odd define element in reverse order 
 
    } 
 

 
    return res; 
 
}; 
 

 

 

 
console.log(arrayExm([1, 2, 3, 4], 10))

0

試試這個,這將有助於您,在這個代碼,你可以在向前和向後通過給真正的(向前)方向和假(向後)啓動中的陣列。即使數組包含字符串,也可以使用此代碼進行排列。

var array = [1, 2, 3, 4]; 
 
var outputArray = []; 
 
var j = 0; 
 
var i; 
 
arrayRepeat(array, 10, true); 
 

 

 
alert(outputArray); 
 

 
function arrayRepeat(array, limit, direction) { 
 

 
    if (direction) { 
 
    for (i = 0; i < array.length, j < limit; i++, j++) { 
 
     outputArray[j] = array[i]; 
 
     if (i == array.length) { 
 
     arrayRepeat(array, limit, false); 
 
     } 
 
    } 
 
    } else { 
 
    for (i = array.length - 1; i >= 0, j < limit; i--, j++) { 
 
     outputArray[j] = array[i]; 
 
     if (i == -1) { 
 
     arrayRepeat(array, limit, true); 
 
     } 
 
    } 
 
    } 
 
}

0

你也可以只CONCAT()陣列,並且其反向()只要你限制參數,使您能夠利用整個數組,並在年底你會切片()的陣列的一部分它將保持

var arrayReapet = (array, limit) => { 
 
    var results = []; 
 
    var divisor = parseInt(limit/array.length); 
 
    var modulo = limit % array.length; 
 
    for (var i = 0; i < divisor; i++) { 
 
    if (i === 0) results = results.concat(array); 
 
    else results = results.concat(array.reverse()); 
 
    } 
 
    results = results.concat(array.reverse().slice(0, modulo)); 
 
    return results 
 
} 
 

 
console.log(arrayReapet([1, 2, 3, 4], 10));

1

編寫一個生成器來生成前後序列。然後寫另一個發生器,取第一個值爲n值。

function* repeat(arr) { 
 
    const rev = arr.slice().reverse(); 
 

 
    while (true) { 
 
    for (let x of arr) yield x; // Up... 
 
    for (let x of rev) yield x; // and down... 
 
    } 
 
} 
 

 
function* take(iterable, n) { 
 
    for (let x of iterable) if (!n--) return; else yield x; 
 
} 
 

 
console.log([...take(repeat([1,2,3,4]), 10)]);