JavaScript数组在奇数索引处分割

时间:2011-03-21 21:34:17

标签: javascript arrays

我有一系列产品,其中包含产品名称和制造商,例如: "product","manufacturer","product","manufacturer"等。

如何将阵列分散到一个单独的阵列中,以便我可以将产品和制造商放在单独的阵列中?我想在每个奇数索引上溢出它,这样我就可以从阵列中取出制造并将其添加到一个新的数组中?

感谢。

8 个答案:

答案 0 :(得分: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];
}

答案 1 :(得分:5)

尝试这样的事情:

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

答案 2 :(得分:2)

Underscore.js groupBy做得非常好。

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

答案 3 :(得分: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

答案 4 :(得分: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]);
    }
}

答案 5 :(得分:0)

使用数学和mod运算符。

通过索引(也许是i)获取数组并检查i的值

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

答案 6 :(得分: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]);
}

但如果长度是奇数,那将会进入无限循环。

答案 7 :(得分: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);