按键名过滤单个JSON

时间:2019-07-19 17:48:38

标签: javascript json

我想在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,但是我没有得到想要的东西,我发现的示例仅与对象数组有关,但是在这种情况下,我需要过滤一个单个对象。

谢谢。

3 个答案:

答案 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.keysreduce

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))