让我们说我有一个接收对象或数组的函数。我想迭代每个元素,并在我去的时候对每个元素做一些事情。我知道我可以使用forEach()
或正常for循环遍历数组。我还可以使用a for in loop遍历对象和数组。但与数组情况不同,我必须使用hasOwnProperty()
检查对象的元素。
我可以只将一些通用代码应用于数组和对象吗?
更新。这是我尝试一些名为value的对象/数组,但没有针对对象的情况显示控制台消息:
keysArray = Object.keys(value);
for(let key in keysArray) {
console.log(value[key])
}
答案 0 :(得分:1)
您可以使用
function* entries(o) {
if (Array.isArray(o))
for (let i=0; i<o.length; i++)
yield [i, o[i]];
else
for (const p in o)
yield [p, o[i]];
}
// or using builtin iterators:
function entries(o) {
return Array.isArray(o) ? o.entries() : Object.entries(o).values();
}
并将其命名为
for (const [key, value] of entries(something)) {
console.log(key, value);
}
当然,你可以做类似的事情,只得到钥匙或只是价值。
答案 1 :(得分:1)
// whatever can be object or array
function doSth(whatever) {
let myLoopable = whatever;
// obj to array
if (!Array.isArray(whatever)) {
myLoopable = Object
.keys(whatever) // get array of keys
.reduce((acc, curKey) => [...acc, whatever[curKey]], []); // get array of values
}
myLoopable.forEach(value => console.log(value));
}
这是一个例子,不是最好的,你必须自己检查它是否是对象,以确保你的功能没有失败