在使用for-in循环时,还需要与hasOwnProperty
一起使用(大多数以前的答案都没有提到)。
原因是for-in循环将遍历对象从原型链继承的方法/属性(如果有人或某个库添加了自定义内容)。
因此,您需要像这样简单可靠的代码:
function fetch(obj, str){
var key, results = [];
for(key in obj) obj.hasOwnProperty(key)
&& key.indexOf(str) === 0
&& results.push([ key, obj[key] ]);
return results;
}
注意:您也可以将此函数命名为“getAllKeysAndValuesStartingWith”(如果您在军队工作,可以将其命名为gakavsw)。
使用方法:
fetch(object, string)
返回一个简单的(易于循环遍历)包含找到结果的数组,因此
var my_results = fetch(testObj, 'imageId');
将给出以下输出:
[ //array of arrays
['imageIds', '/uploads/tmp/image-3.png']
, ['imageIdsZh', ''] /*
, [key, value] and more if it finds them */
]
在这里jsfiddle工作。
当然,也可以仅推送值:results.push(obj[key])
我建议不要返回一个对象((results[key]=obj[key])
),因为在这种情况下,数组更容易使用。
希望这能帮到你!
foreach
+if
怎么样? - zerkms