2011-03-21 56 views
1

我的產品陣列此包含產品名稱和製造商,例如"product","manufacturer","product","manufacturer"等。JavaScript數組拆分在奇數索引

我怎麼能灑數組到一個單獨的陣列,這樣我可以有單獨的陣列產品和製造商?我想在每一個奇數索引處將它泄漏出來,這樣我就可以從數組中取出製造商並將其添加到新數組中?

謝謝。

回答

4

嘗試用這樣的事情:

var arr = ["product","manufacturer","product","manufacturer"]; 
var products = []; 
var manufacturers = []; 
for (var i = 0; i < arr.length; i += 2) { 
    products.push(arr[i]); 
    arr[i+1] && manufacturers.push(arr[i + 1]); 
} 
+0

這確實會讓您容易受到逐個錯誤的影響。 *(是的,我知道JS不會爆炸,但它仍然不是一個好主意。)* – ChaosPandion 2011-03-21 21:43:49

+0

環要麼是'我 2011-03-21 21:44:06

+0

是的,我寫了它希望最好:)感謝您的意見。 – Marcelo 2011-03-21 21:48:19

0

這應該工作:

function separate(array) { 
    var products = [], 
     manufacturers = []; 
    for (var i = 0, length = array.length; i < length; i++) { 
     if (i % 2 === 0) { 
      products.push(array[i]);  
     } else { 
      manufacturers.push(array[i]); 
     }   
    } 
    return { 
     products: products, 
     manufacturers: manufacturers 
    }; 
} 

jsFiddle Example

0

編輯:我的反應是有點晚的演出。如果你選擇了其他做同樣事情的人,我寧願選擇。

如果陣列是這樣的:

var result = ["Product #1", "ABC Company", "Product #2", "DEF Company"]; 

您可以使用for循環

var products = []; 
var manufacturers = []; 
for (var i = 0; i < results.length; ++i) { 
    if (i % 2 === 0) { 
     products.push(products[i]); 
    } else { 
     manufacturers.push(products[i]); 
    } 
} 
8
/** 
* @param candid Array of results 
* @return Returns an array where index 0 = array of even ones, and index 1 = array of odd ones 
*/ 
function splitArray(candid) { 
    var oddOnes = [], 
     evenOnes = []; 
    for(var i=0; i<candid.length; i++) 
     (i % 2 == 0 ? evenOnes : oddOnes).push(candid[i]); 
    return [evenOnes, oddOnes]; 
} 
+0

傑傑奧你的是更加完整。給予好評! – Alfabravo 2011-03-21 21:43:15

0

使用數學和mod運算符提取產品和製造商。

獲得通過你的數組索引(我,也許是),並檢查i的值

if (i % 2 == 0){ 
goes_to_even_array(); 
]else{ 
goes_odd_array(); 
} 
0

好吧,這裏是另一個入口:

var arr = ['p0','m0','p1','m1','p2']; 
var products = []; 
var manufacturers = []; 
var i = 0, iLen = arr.length; 

while (i < iLen) { 
    manufacturers.push(arr[i++]); 
    products.push(arr[i++]); 
} 

,如果順序無關緊要然後:

var i = arr.length; 
while (i) { 
    i && manufacturers.push(arr[--i]); 
    i && products.push(arr[--i]); 
} 

,如果你絕對信任的長度甚至可以說:

var i = arr.length; 
while (i) { 
    manufacturers.push(arr[--i]); 
    products.push(arr[--i]); 
} 

,但將進入無限循環,如果長度爲奇數。

0

使用遞歸:)

var split = function(arr) { 
    var splitHelper = function(arr, odd, even) { 
     if (arr.length == 0) { 
      return {odd: odd, even: even}; 
     } 
     odd.push(arr.splice(0, 1)[0]); 
     arr[0] && even.push(arr.splice(0, 1)[0]); 
     return splitHelper(arr, odd, even); 
    }; 
    return splitHelper(arr, [], []); 
}; 

var arr = ["product", "manufacturer", "product", "manufacturer"]; 
var arrays = split(arr); 
// Test 
alert("odd: " + arrays.odd); 
alert("even: " + arrays.even); 
1

Underscore.js groupBy另一種方法做的工作還不錯。

_.groupBy(["product", "manufacturer","product", "manufacturer"], function(val, index){ return index % 2; }); 
=> {1: ["product", "product"], 2: ["manufacturer", "manufacturer"]}