查找和由值在嵌套数组
除去对象阵列我有具有以下结构的阵列:查找和由值在嵌套数组
var questions = [
{"answer":
["A1", "A2", "A3"]
},
{"answer":
["B1"]
},
{"answer":
["C1", "C2"]
}
]
我也有对象的像下面的数组:
var answers = [
{"value": "A1"},
{"value": "A512"},
{"value": ""},
{}
];
对于每个对象在answers
(如果它不是{}
)我想查找相应的值是否出现在questions
的某个对象中。如果是这样,我想更新一个counter
变量,并从questions
中删除该对象。我如何实现这一目标?
试着像您到目前为止已经试过这
var questions = [{
"answer": ["A1", "A2", "A3"]
}, {
"answer": ["B1"]
}, {
"answer": ["C1", "C2"]
}];
var count = 0;
answers.forEach(function(ans) {
var flag = isExists(ans.value);
flag && count++;
});
console.log(count);
function isExists(value) {
return questions.some(function(ques) {
var ind = ques.answer.indexOf(value);
if (ind > -1) {
ques.answer.splice(ind, 1);
return true;
}
});
}
我觉得你有点错过了'.some()'的意思。你不需要“标志”。如果你从回调中返回true,'.some()'方法本身返回'true'。所以你需要的是'return questions.some(function(ques){return ques.answer.indexOf(value)> -1;});'如果需要的话,将'.splice()'扔回去。 – 2015-06-20 02:15:05
完美! +1现在使用'.reduce()'而不是'.forEach()',你将成为ECMAScript5摇滚明星! ;-)'var count = answers.reduce(function(c,ans){ return c +(isExists(ans.value)?1:0) },0);' – 2015-06-20 02:24:37
谢谢!我一直坚持了几个小时,但显然无法得到如何编写'.forEach()'和'.some()'的权利。 – yana
什么?这没什么特别的。简单地迭代和比较。 –
您可以详细介绍要删除哪个对象吗?它是questions数组中的整个答案对象,还是例如第二个答案对象在回答对象时使用空数组离开对象的“B1”答案? – 3abqari
您没有JSON数组。你有一个JS数组。 – Oriol