【发布时间】:2021-11-06 01:20:28
【问题描述】:
我正在尝试从对象和属性列表创建一个对象。
const pick = (obj, ...fields) => {
return [...fields] = obj
};
我怎样才能意识到这一点?
【问题讨论】:
-
可以分享一下这个函数的输入输出示例吗?
标签: javascript object
我正在尝试从对象和属性列表创建一个对象。
const pick = (obj, ...fields) => {
return [...fields] = obj
};
我怎样才能意识到这一点?
【问题讨论】:
标签: javascript object
遍历fields数组并检查属性is available in obj然后放入需要返回的最终对象。
const pick = (obj, ...fields) => {
const finalObj = { };
for (field of fields) {
if (obj[field]) {
finalObj[field] = obj[field];
}
}
return finalObj;
};
const obj = { name: "test name", age: 25, title: "Mr.", city: "test city" };
console.log(pick(obj, "name", "age", "city", "other"));
【讨论】:
试试这样的:
const pick = (obj, ...fields) => Object.fromEntries(Object.entries(obj).filter(([k]) => fields.includes(k)))
【讨论】:
减少字段列表,并从原始对象中获取值:
const pick = (obj, ...fields) => fields.reduce((acc, field) => ({ ...acc, [field]: obj[field] }), {});
const obj = { a: 1, b: 2, c: 3 };
const result = pick(obj, 'a', 'c');
console.log(result);
您可以使用in 运算符来忽略原始对象上不存在的属性:
const pick = (obj, ...fields) => fields.reduce((acc, field) => {
const value = obj[field];
if(field in obj) acc[field] = value;
return acc;
}, {});
const obj = { a: 1, b: 2, c: 3 };
const result = pick(obj, 'a', 'c', 'd');
console.log(result);
【讨论】: