如何解决以不变的方式更改特定键的对象属性
如果预定义键的值是一个空字符串,那么我想将其更改为空值。
所以:
const foo = {
first: '',second: 'bar',third: '',fourth: '',fifth: '',}
应归一化为:
const foo = {
first: null,fourth: null,}
现在以下示例有效:
const normalize = (payload,keys) => {
const clone = { ...payload }
Object.entries(payload).forEach(([key,value]) => {
if (keys.includes(key) && value === '') {
clone[key] = null;
}
});
return clone;
}
const foo = {
first: '',}
console.log(normalize(foo,['first','third']));
但是'clone'变量并不那么精明。
现在有一种常用的方法是使用Object.assign()。
可以这样做吗?
解决方法
另一种方法遍历keys参数数组。没有必要遍历对象中的所有键,而仅遍历所需的键
const normalize = (payload,keys) => {
return keys.reduce((a,k) => {
(a[k] === '') && (a[k] = null)
return a;
},{ ...payload })
}
const foo = {
first: '',second: 'bar',third: '',fourth: '',fifth: '',}
console.log(normalize(foo,['first','third']));
,
怎么样?
请参考norm
中的键,将新映射返回为
null (如果要进行标准化),否则为空字符串本身。
const foo = {
first: '',},norm = ['third','fifth'];
const normalize = (payload,keys) => {
return keys.reduce((a,k) => a[k] === "" && (a[k] = null) || a,{...payload})
}
输出:
const norm = ['third','fifth'];
normalize(foo,norm)
{first: "",second: "bar",third: null,fourth: "",fifth: null}
,
您可以使用for...in
进行迭代,并检查密钥是否与some()
匹配
const foo = {
first: '',}
const normalize = ({...obj},arr) => {
for (let key in obj) {
if(arr.some(k => k === key)) {
obj[key] = null;
}
}
return obj;
}
console.log(normalize(foo,['third','fifth']));
,
为什么不循环遍历数组并变异对象
const foo = {
first: '',}
function normalize(obj,arr) {
const newObj={...obj}
for (let i = 0; i < arr.length; i++) {
newObj[arr[i]] = null;
}
return newObj;
}
console.log(normalize(foo,'third']));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。