筛选普通对象键值对

时间:2019-11-11 19:39:31

标签: javascript reactjs

我在存储在变量keyData中的形式的JS对象:

{type: "", label: "fname", title: "first name", …}
    defaultvalue: ""
    disabled: false
    label: "fname"
    readonly: false
    required: "on"
    title: "first name"
    type: ""
    __proto__: Object

我想筛选这些键值对并返回一个新对象,其中包含键值对以及其中的可用数据。例如,在此数据中,它应仅返回标题,必填和标签

有了这些新的过滤数据,我想映射一个以过滤键作为输入类型,过滤值作为其值的反应形式。

我对如何解决这个问题感到困惑。我尝试使用 Object.entries(keyData) 像这样:

   Object.entries(keyData).filter(x => console.log(x))
   console.log(keyData)

console.log(keyData)上打印:

(2) ["type", ""]
(2) ["label", "fname"]
(2) ["title", "first name"]
(2) ["placeholder", ""]
(2) ["required", "on"]
(2) ["readonly", false]
(2) ["disabled", false]

我无法进一步过滤此空数据。

2 个答案:

答案 0 :(得分:2)

一种选择是在使用reduce之后使用Object.entries。然后,只有在value为真时,您才能返回对象。

const data = {
  a: "foo",
  b: false,
  c: "bar",
  d: null
};

const filtered = Object.entries(data).reduce((acc, [key, value]) => {
  if (value) {
    acc[key] = value;
  }
  return acc;
}, {});

console.log(filtered);

答案 1 :(得分:2)

您需要先使filter()reduce()成为对象

Object.entries(keyData).filter((key, value) => value).reduce((prev, curr) => {
  prev[curr[0]] = curr[1];
  return prev;
}, {});