我想在JS中创建某种Laravel的only
方法。
我有以下JSON:
let obj = {
name: "Wil",
age: "20",
id: "1"
}
和一个过滤器数组:
let filters = ['name', 'age'];
在这种情况下,我想要一个带有2个参数的函数:
const filterJSON = (object, filters) => {
}
而且我希望函数返回仅在过滤器数组中传递的键名的相同对象。
在这种情况下:
{
name: "Wil",
age: "20"
}
我有一段时间尝试使用.map
和.filter
,但是我没有得到想要的东西,我发现的示例仅与对象数组有关,但是在这种情况下,我需要过滤一个单个对象。
谢谢。
答案 0 :(得分:2)
可以使用简单的reduce()
返回新对象
let obj = { name: "Wil",age: "20",id: "1"}
let filters = ['name', 'age'];
const filterJSON = (obj, fil) => fil.reduce((a,c) => (a[c] = obj[c], a),{})
console.log(filterJSON(obj, filters))
答案 1 :(得分:1)
使用Object.keys
和reduce
const obj = {
name: "Wil",
age: "20",
id: "1"
}
let filters = ['name', 'age'];
const filterJSON = (object, filters) => Object.keys(object).reduce((a, v) => {
if (filters.some(f => f === v)) {
a[v] = object[v];
}
return a;
}, {});
console.log(filterJSON(obj, filters));
答案 2 :(得分:0)
创建一个新对象,然后遍历数组并使用对象的方括号表示法添加键和值
let obj = {
name: "Wil",
age: "20",
id: "1"
}
let filters = ['name', 'age'];
function getObj(arr, obj) {
let newObj = {};
filters.forEach(function(elem) {
newObj[elem] = obj[elem]
})
return newObj;
};
console.log(getObj(filters, obj))