我有两个数组,initialArray
和testArray
。 initialArray
由8个数组组成,每个数组都有一个元素(一个对象),testArray
由8个元素组成(每个元素都是一个对象)。
我想在满足条件时弹出并将testArray
中的每个元素推送到initialArray
中的数组,这样我最终会得到一个空的testArray
和initialArray[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
方法,我需要传递与当前元素相关的值option1
和option2
,例如initialArray[0][0]
,选择一个值与option1
和option2
的值不匹配的元素,例如testArray[3]
,弹出元素并将其推送到initialArray
中的当前数组,例如{ {1}}现在包含元素initialArray[0][0]
。
答案 0 :(得分:1)
我认为some
在这里不会有太大帮助。它将返回true
或false
,因此它不会告诉您哪个元素符合条件。
您可以使用正常循环:
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的一部分,在旧版浏览器中不可用。