javascript - 在 Javascript 中过滤对象
问题描述
我想根据条件用另一个对象键更改对象键。
const obj = {
name: 'carl',
age: 2
};
const filterF = (obj, toChange, newV) => {
return Object.keys(obj).reduce((acc, key) => {
if (obj[key] === toChange) {
acc[key] = newV;
}
return acc
}, {})
}
console.log(filterF(obj, 'name', 'newName'))
基本上我希望这样:
{
name: 'newName',
age: 2
};
运行我的代码我得到一个空对象。如何修复代码?
解决方案
您只需要添加或更新值
const obj = {
name: 'carl',
age: 2
};
const addOrUpdate= (obj, key, value) => {
// no need to itterate
obj[key] = value;
return obj
}
console.log(addOrUpdate(obj, 'name', 'newName'))
如果您只需要在其键已存在于对象中的情况下更新该值。
const obj = {
name: 'carl',
age: 2
};
const update= (obj, key, value) => {
// no need to itterate
if(obj.hasOwnProperty(key)) {
obj[key] = value;
}
return obj
}
console.log(update(obj, 'name', 'newName'))
// no new value added
console.log(update(obj, 'city', 'my city'))
如果您只是想知道如何使用 reduce 来实现这一点,仅用于学习目的。
您不应该在这里使用 reduce,因为您只是创建了前一个对象的浅表副本,但只是为了学习目的,我添加了一个示例以及您出错的地方。
const obj = {
name: 'carl',
age: 2
};
const filterF = (obj, toChange, newV) => {
return Object.keys(obj).reduce((acc, key) => {
// you had key wronly written as keys, and comparing objectp[key] value with new key
if (key === toChange) {
acc[key] = newV;
} else {
acc[key] = obj[key];
}
return acc
}, {})
}
console.log(filterF(obj, 'name', 'newName'))
推荐阅读
- javascript - Javascript 问题 - 在 document.getElementById 之后无法提交表单
- postgresql - 允许空值与 Postgres 关联
- javascript - 我如何测试(开玩笑)以期待回报?
- vue.js - Vue.js - 带有自定义叠加层的自定义照片网格
- java - Luhn 算法的多个错误
- html - 下拉移动菜单未推送内容
- java - 如何以编程方式在 Android 中 ping 网站
- python - 针对自定义 CA 的 xml 签名验证
- python - 从网站上抓取文本值但得到 AttributeError
- docker - How do I make Synology Diskstation port visible to computer for Docker app