在javascript中使用一些方法

时间:2011-12-09 17:59:50

标签: javascript

我有两个数组,initialArraytestArrayinitialArray由8个数组组成,每个数组都有一个元素(一个对象),testArray由8个元素组成(每个元素都是一个对象)。 我想在满足条件时弹出并将testArray中的每个元素推送到initialArray中的数组,这样我最终会得到一个空的testArrayinitialArray[0]..[7]拥有testArray个元素之一。

var initialArray = [
    [{optiona:'some string',optionb: 'some string'}],
    [/*...*/],
];
var testArray = [
    {optiona:'some other string',optionb: 'some other string'},
    {/*...*/}
];

最终的initialArray应该是

[
    [
        {optiona:'some string',optionb: 'some string'},
        {optiona:'some other string',optionb: 'some other string'}
    ],
    [
        {..},
        {..}
    ],
    // ,,,
]

到目前为止我的代码:

var mySomeFunction = function(element, index, array) {
    // test if elements are not equal to (element.optiona != option1 && element.optionb != option2);
    //return the element
}

initialArray.forEach(function(item) { 
    //get the conditionals for the current element
    var option1 = item[0].optiona
    var option2 = item[0].optionb

    item.some(mySomeFunction)
    // item.push(element returned from mySomeFunction)
});  

我不确定如何正确使用.some方法,我需要传递与当前元素相关的值option1option2,例如initialArray[0][0],选择一个值与option1option2的值不匹配的元素,例如testArray[3],弹出元素并将其推送到initialArray中的当前数组,例如{ {1}}现在包含元素initialArray[0][0]

1 个答案:

答案 0 :(得分:1)

我认为some在这里不会有太大帮助。它将返回truefalse,因此它不会告诉您哪个元素符合条件。

您可以使用正常循环:

initialArray.forEach(function(item) { 
    //get the conditionals for the current element
    var option1 = item[0].optiona
    var option2 = item[0].optionb

    for(var i = 0, len = testArray; i < len; i++) {
        if(testArray[i].optiona !== option1 && testArray[i].optionb !== option2) {
            item.push(testArray[i]);
            testArray.splice(i, 1); // remove element from array
            break;
        }
    }
}); 

请注意,forEach是ECMAScript 5的一部分,在旧版浏览器中不可用。