如何通过循环每个键来更新对象属性?

时间:2017-11-09 05:39:21

标签: javascript

我正在进行一些测验,我在这里有这些控制台日志:

console.log(obj) => { cat: undefined, dog: undefined }
console.log(keys)` => [ 'cat', 'dog' ]
console.log(reversedKeys) =>[ 'tac', 'god' ]

我的目标是更新对象属性。我这样做(试图通过键映射)但这段代码不起作用。我刚刚开始学习javascript并且明显遗漏了这段代码中的内容。我看得越多,我发现自己就越困惑。

keys.map(k => {
  reversedKeys.map(r => {
    obj[keys[k]] = r  
  }) 
return obj  
})

预期结果为:console.log(obj) => { cat: tac, dog: god}

3 个答案:

答案 0 :(得分:3)

使用for..in迭代对象。然后使用split方法创建key中使用的字符数组。使用数组reverse方法反转数组和join方法以创建新字符串

var obj = {
  cat: undefined,
  dog: undefined
}

for (var keys in obj) {
  obj[keys] = keys.split("").reverse().join("")
}
console.log(obj)

答案 1 :(得分:2)

您可以使用for..in循环来迭代对象键,将元素名称转换为数组,.reverse().join()

let obj = { cat: undefined, dog: undefined };

for (let key in obj) {
  obj[key] = [...key].reverse().join("")
}

console.log(obj);

答案 2 :(得分:1)

根据对象的不同,for...in可能会返回意外的结果,因为它会在原型中包含可枚举的属性。要排除那些,您可以使用if添加obj.hasOwnProperty(key)语句作为条件:



const obj = { cat: undefined, dog: undefined }
for (let key in obj) {
  if (obj.hasOwnProperty(key)) {
    obj[key] = key.split("").reverse().join("")
  }
}
console.log(obj)




你也可以使用Object.keys(),它不包括原型中的可枚举属性,如下所示:



const obj = { cat: undefined, dog: undefined }
Object.keys(obj).forEach(key => {
  obj[key] = key.split("").reverse().join("")
})
console.log(obj)