我的產品陣列此包含產品名稱和製造商,例如"product","manufacturer","product","manufacturer"
等。JavaScript數組拆分在奇數索引
我怎麼能灑數組到一個單獨的陣列,這樣我可以有單獨的陣列產品和製造商?我想在每一個奇數索引處將它泄漏出來,這樣我就可以從數組中取出製造商並將其添加到新數組中?
謝謝。
我的產品陣列此包含產品名稱和製造商,例如"product","manufacturer","product","manufacturer"
等。JavaScript數組拆分在奇數索引
我怎麼能灑數組到一個單獨的陣列,這樣我可以有單獨的陣列產品和製造商?我想在每一個奇數索引處將它泄漏出來,這樣我就可以從數組中取出製造商並將其添加到新數組中?
謝謝。
嘗試用這樣的事情:
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]);
}
這應該工作:
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
};
}
編輯:我的反應是有點晚的演出。如果你選擇了其他做同樣事情的人,我寧願選擇。
如果陣列是這樣的:
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]);
}
}
/**
* @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];
}
傑傑奧你的是更加完整。給予好評! – Alfabravo 2011-03-21 21:43:15
使用數學和mod運算符提取產品和製造商。
獲得通過你的數組索引(我,也許是),並檢查i的值
if (i % 2 == 0){
goes_to_even_array();
]else{
goes_odd_array();
}
好吧,這裏是另一個入口:
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]);
}
,但將進入無限循環,如果長度爲奇數。
使用遞歸:)
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);
Underscore.js groupBy另一種方法做的工作還不錯。
_.groupBy(["product", "manufacturer","product", "manufacturer"], function(val, index){ return index % 2; });
=> {1: ["product", "product"], 2: ["manufacturer", "manufacturer"]}
這確實會讓您容易受到逐個錯誤的影響。 *(是的,我知道JS不會爆炸,但它仍然不是一個好主意。)* – ChaosPandion 2011-03-21 21:43:49
環要麼是'我
2011-03-21 21:44:06
是的,我寫了它希望最好:)感謝您的意見。 – Marcelo 2011-03-21 21:48:19