是否可以在不知道父级键的情况下破坏嵌套对象?

时间:2019-02-19 08:32:12

标签: javascript object destructuring

我想知道是否有可能在不知道父对象键的情况下对嵌套对象进行破坏?

之所以这样做,是因为猫鼬验证错误会在errors键中返回一个对象,并且该对象的每个条目都是另一个对象,其中键是存在错误的字段的名称。

const data = {
  name: {
    path: 'name',
    name: 'The error message'
  },
  email: {
    path: 'email',
    name: 'Another error message'
  }
}

因此结果可能类似于

{
  name: 'The error message',
  email: 'Another error message'
}

是否有可能唯一的方法是使用for in循环并在其中执行解构分配?

let message = {}
for (var k in data) {
  var { path, name } = data[k]
  message[path] = name
}

4 个答案:

答案 0 :(得分:0)

您可以获取值并映射新对象。然后将所有对象分配给一个对象。

const
    data = { name: { path: 'name', name: 'The error message' }, email: { path: 'email', name: 'Another error message' } }
    result = Object.assign({}, ...Object
        .values(data)
        .map(({ path, name }) => ({ [path]: name }))
    );

console.log(result);

答案 1 :(得分:0)

像这样使用Object.values

const data = { name: { path: 'name', name: 'The error message' } };

const { path, name } = Object.values(data)[0];

console.log(path);
console.log(name);

答案 2 :(得分:0)

const data = {
  name: {
    path: 'name',
    name: 'The error message'
  }
}

const {path, name} = Object.values(data)[0];

console.log(path, name);

答案 3 :(得分:0)

是的,您可以在for in内部进行操作,方法是获取密钥并访问值并将其解构

const data = {
  name: {
    path: 'name',
    name: 'The error message'
  }
}

for(let key in data){
  let { path, name } = data[key]
  console.log('name --->',name)
  console.log('path --->',path)
}