Javascript 使用相同的代码迭代并访问数组和对象元素
假设我有一个函数,它接收一个对象或一个数组。我希望遍历每个元素,并在执行过程中对每个元素执行一些操作。我知道我可以使用Javascript 使用相同的代码迭代并访问数组和对象元素,javascript,arrays,iteration,Javascript,Arrays,Iteration,假设我有一个函数,它接收一个对象或一个数组。我希望遍历每个元素,并在执行过程中对每个元素执行一些操作。我知道我可以使用forEach()或普通for循环遍历数组。我还可以使用遍历对象和数组。但与数组不同,我必须使用hasOwnProperty()检查对象的元素 我可以对数组和对象应用一些通用的代码吗 更新。这是我对某个名为value的对象/数组的尝试,但没有针对该对象案例显示控制台消息: keysArray = Object.keys(value); for(let key in keysArr
forEach()
或普通for循环遍历数组。我还可以使用遍历对象和数组。但与数组不同,我必须使用hasOwnProperty()
检查对象的元素
我可以对数组和对象应用一些通用的代码吗
更新。这是我对某个名为value的对象/数组的尝试,但没有针对该对象案例显示控制台消息:
keysArray = Object.keys(value);
for(let key in keysArray) {
console.log(value[key])
}
你可以用
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();
}
当然,您也可以做类似的事情,只获取键或值。您可以使用
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();
}
// 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));
}
当然,您也可以做类似的事情,只获取键或值
// 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));
}
这是一个例子,不是最好的,您必须自己检查它是否是对象,以确保您的函数没有失败
这是一个示例,不是最好的,您必须自己检查它是否是object,以确保您的函数没有失败您可以使用
object。条目
。可能对您有用?显示一些您理解的代码,我们可以从中获取。“我必须使用hasOwnProperty()检查对象的元素”-否。不,是你。你可以使用Object.entries
。也许对你有用?展示一些你理解的代码,我们可以从中获取。“我必须用hasOwnProperty()检查对象的元素”-否。不,是你。谢谢你@Bergi。我得查一下。*
申报发电机了吗?@chamilton是的,谢谢你@Bergi。我得查一下。*
是否声明了一个生成器?@chamilton是的,这是一个我想你想要的map
,而不是reduce
map
是另一个选择:D.这取决于你,这将是一个简单性、可读性和性能方面的巨大改进……对于性能,我肯定不知道。为了简单易读,我确信它等于map
和reduce
有各自的含义和方法。我必须同意,大多数人对reduce
不满意,但这并不是因为复杂性。是的,它们有自己的含义-当您打算将数组映射到一个新数组时,您不应该使用reduce
。我想您需要map
,不reduce
map
是另一种选择:D.这取决于您自己,它将在简单性、可读性和性能方面有很大的改进…对于性能,我肯定我不知道。为了简单易读,我确信它等于map
和reduce
有各自的含义和方法。我必须同意,大多数人对reduce
不满意,但这并不是因为复杂性。是的,它们有自己的含义——当您打算将数组映射到新数组时,您不应该使用reduce
。