JavaScript中使用for...in循环进行迭代

3

我有一个名为objToArray的空数组。我正试图使用for-in循环将哈希checkObj对象中所有键的值大于或等于2的数字填充到该数组中。

const checkObj = {
  oddNum: 1,
  evenNum: 2,
  foundNum: 5,
  randomNum: 18
};

const objToArray = [];

for (let values in checkObj) {
  if (Object.values(checkObj) >=2 ) {
    objToArray.push(checkObj.values())
    }
}

console.log(objToArray);

目前为止,我得到的objToArray是一个空数组,即使它应该包含三个元素,并且应该等于[2, 5, 18]。


Object.values(checkObj) >=2 替换为 checkObj[values] >= 2,并将 objToArray.push(checkObj.values()) 替换为 objToArray.push(checkObj[values]) - Karan
这个很好用。所以基本上,checkObj [values] 等同于哈希对象中的值? - Codestudio
是的,在你的 checkObj 中,你可以通过 checkObj.oddNumcheckObj["oddNum"] 访问 oddNum 属性值,或者对于 let key = "oddNum";checkObj[key] 将返回相同的值。 - Karan
6个回答

5
尝试使用Object.values(checkObj).filter(x => x >= 2);
  1. Object.values(checkObj)获取所有值的数组。
  2. 使用.filter(x => x >= 2)筛选出值>=2的值。
如果你想使用for ... in循环,那么它遍历的是key,因此您可以使用obj[key]来获取值。由于您声明了for (let values in checkObj),因此values对象将保存checkObjkey。因此,您可以使用checkObj[values]来访问值。
请查看下面的输出。

const checkObj = {
  oddNum: 1,
  evenNum: 2,
  foundNum: 5,
  randomNum: 18
};

// Approach 1
let result = Object.values(checkObj).filter(x => x >= 2);
console.log(result);

// Approach 2
const objToArray = [];
for (let values in checkObj) {
  if (checkObj[values] >= 2) {
    objToArray.push(checkObj[values]);
  }
}
console.log(objToArray);


1

这是你想要的吗?

for...in语句遍历对象的所有可枚举属性,应该是键而不是值。

const checkObj = {
  oddNum: 1,
  evenNum: 2,
  foundNum: 5,
  randomNum: 18
};

const objToArray = [];

for (let key in checkObj) {
  if (checkObj[key] >= 2) {
    objToArray.push(checkObj[key])
  }
}

console.log(objToArray)


1

试试这个:

const checkObj = {
    oddNum: 1,
    evenNum: 2,
    foundNum: 5,
    randomNum: 18
};
    
const objToArray = [];

for (let [key, value] of Object.entries(checkObj)) {
    // console.log(`${key}: ${value}`);
    if(value>=2){
        objToArray.push(value);
    }
}

console.log(objToArray);


1
由于您已经在迭代checkObjkey,因此您不需要检查if (checkObj.hasOwnProperty(property)) {,它总是为true - Karan

1

试试这个

const checkObj = {
  oddNum: 1,
  evenNum: 2,
  foundNum: 5,
  randomNum: 18
};

let objToArray = [];
objToArray = Object.values(checkObj).filter(elem => elem >= 2);
console.log(objToArray);

3
除了展示解决问题的可行方案,值得解释一下原帖中有哪些不正确的地方,以便让其从中学习。 - viam0Zah
@viam0Zah 谢谢,我一定会在将来保持这种做法。 - Bhuwan Pandey

0
const checkObj = {
  oddNum: 1,
  evenNum: 2,
  foundNum: 5,
  randomNum: 18
};

const objToArray = []; 

//changing the loop into a foreach loop that iterates over the keys
Object.keys(checkObj).forEach((key => {
  if (checkObj[key]) {
    objToArray.push(checkObj[key])
  }
}))


啊对,没错,没想全。修改中。 - Cedervall

0
尝试这个:希望你懂了。
let checkObj = {
  oddNum: 1,
  evenNum: 2,
  foundNum: 5,
  randomNum: 18
};

let objToArray = [];

for (let values of Object.values(checkObj)) {
  console.log(values);
  if (values >=2 ) {
    objToArray.push(values)
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接