Javascript对象:查找第一个嵌套对象,其值为null

时间:2019-06-28 08:08:57

标签: javascript

我有一个api,它返回这种形式的嵌套对象:

obj: {
    nestedobj1: {
        name: 'a',
        prop2: 'b',
        prop3: 'c',
        prop4: 'd'
    },
    nestedobj2: {
        name: 'a',
        prop2: 'b',
        prop3: 'c',
        prop4: 'd'
    },
    nestedobj3: {
        name: null,
        prop2: null,
        prop3: null,
        prop4: null
    },
    nestedobj4: {
        name: null,
        prop2: null,
        prop3: null,
        prop4: null
    },
// and so on up to 15 nested objects whose internal properties are null
}

这些嵌套对象应该保存一行表数据。当用户输入字段的详细信息时,需要将输入保存在名称值为null的嵌套对象之一中。如何在javascript中实现此目标?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您想从obj中提取第一个键/值条目,其中值对象本身包含任何null值。

一种实现该目标的方法是:

  1. 通过obj提取Object.entries()的键/值条目,然后
  2. 过滤条目数组,以获取条目值对象包含一个或多个null值的任何数组(可以使用Object.values().some()进行操作-请参见下面的代码段),
  3. 将通过先前过滤步骤的所有条目重建为原始对象形式
  4. 返回第一个匹配结果(如果有)

这可以用代码表示为:

const obj={nestedobj1:{name:'a',prop2:'b',prop3:'c',prop4:'d'},nestedobj2:{name:'a',prop2:'b',prop3:'c',prop4:'d'},nestedobj3:{name:null,prop2:null,prop3:null,prop4:null},nestedobj4:{name:null,prop2:null,prop3:null,prop4:null}};

/* Pluck first value from result array, if any */
const [ firstObjectWithNull ] = Object.entries(obj)
/* Filter/find any key/value entries from state object where object values
have any nulls */
.filter(entry => {

  const [key, object] = entry;
  const objectValues = Object.values(object);

  /* With "some()", find the first entry where the values of the object 
  have a null */
  return objectValues.some(value => value === null);
})
.map(entry => {
  
  /* Reconstuct any fiiltered entries to key/value objects */
  const [key, object] = entry;
  return { [key] : object };
});

console.log(firstObjectWithNull);