gpt4 book ai didi

javascript - Javascript 对象属性和数组之间的迭代有什么区别

转载 作者:行者123 更新时间:2023-11-28 04:28:03 28 4
gpt4 key购买 nike

我无法理解迭代数组与迭代对象属性之间的区别。

有什么区别:

for (key in object) {
DO THIS
} --> for objects

for (var i = 0 ; i<array.length ; i++) {
DO THIS
} --> for arrays

如果我想将对象的属性与数组中的值进行比较,我可以在同一个函数中迭代对象和数组吗?例如,像这样:

for (var key in object){
if (object.hasOwnProperty(key)){
for (i=0 ; i<array.length; i++){
if (object[key] === array[i]){
filteredKeys[key] = object [key]}

我的最终目标是编写一个函数,该函数接受一个对象和一个键数组,并返回一个仅包含在数组中找到的键的新对象。

最佳答案

您必须了解的是,数组只是特殊对象,其属性是数字(表示索引)和表示这些索引处的元素的值 - 它们与任何对象一样具有键和值。使用像这样的 for 循环:

for(var i = 0; i < arr.length; i++) {
arr[i]; //iterating through the array and accessing each element
}

您只需像访问任何其他对象一样访问数字键,只需通过 bracket notation因为 arr.0 是无效语法。现在使用 for...in 循环,您只需迭代对象的可枚举属性。正如我所说,数组的索引(即 0、1、2 等)只是数组对象的键!因此,上面的 for 循环的作用与此相同:

for(var i in arr) {
arr[i];
}

因为数组的索引是键,所以它会遍历键(索引),因此您可以访问数组的元素。

<小时/>

为了解决您的另一个问题 - 如果对象和数组具有不同的键,则无法使用相同的循环迭代它们。数组以数字索引作为键进行排序,对象的键可以是任何内容。它们的键不一定相同,因此从数组和对象访问该键将不会产生正确的结果。

相反,如果您想根据对象是否在数组中过滤掉对象中的某些键,请尝试以下操作:

function filterKeysByArray(object, keys) {
return keys.reduce((filteredObj, key) => {
if(object.hasOwnProperty(key)) {
filteredObj[key] = object[key];
}
return filteredObj;
}, {});
}

这完全消除了嵌套的 for 循环。它只迭代传递的数组中的键,并将其缩减为单个对象,即过滤后的对象。它检查对象是否具有键指定的属性,如果有,则将其添加到过滤后的对象中。

关于javascript - Javascript 对象属性和数组之间的迭代有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44867527/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com