【发布时间】:2016-03-26 16:57:57
【问题描述】:
我有以下基于docs的代码
var arr = [
{ id: 15 },
{ x: [{ id: 777 }, { id: 'xx' }, { notidproperty: 987 }]},
{ id: 1111 }
];
function filterByID(obj) {
if ('id' in obj && typeof(obj.id) === 'number' && !isNaN(obj.id)) {
return true;
} else if (Object.prototype.toString.call(obj) === '[object Array]') { //obj type is Object, not Array
obj.filter(filterByID);
} else {
return false;
}
}
var arrByID = arr.filter(filterByID);
console.log('expected length = 3, actual length = ' + arrByID.length);
console.log(arrByID);
如何过滤“arr”数组?是否有任何其他技术可以获得正确的结果?
编辑:预期结果是过滤后的对象数组,其 id 属性为数值
所以预期的 Id 值为 15、777、1111
【问题讨论】:
-
请添加想要的结果。
-
缺少对您甚至希望此代码执行的操作的描述...请参阅How to Ask。另请注意,
else if条件下不会返回任何内容 -
你可以用
Array.isArray()替换Object.prototype.toString.call( obj ) === '[object Array]') -
是的,您的预期输出是 3,但您的实际输出(根据更正后的代码)是 2。您能解释一下您要达到的目标吗?
-
啊,试图获取键为
id的对象,其值为typeof number。
标签: javascript arrays multidimensional-array filter