使用对象的属性将对象排列成对象

时间:2019-04-16 11:55:30

标签: javascript arrays node.js object

抱歉,这有点令人困惑,但是我有这个数组:

[
      {
        name: 'id',
        type: 'string',
        primary: true
      },
      {
        name: 'notes',
        type: 'text',
        default: '[]'
      },
      {
        name: 'reminders',
        type: 'text',
        default: '[]'
      }
    ]

我怎么把它变成

{
  notes: '[]',
  reminders: '[]'
}

?这是逻辑:任何具有default属性的索引,将新对象中的键设置为索引的name,并将值设置为索引的default

5 个答案:

答案 0 :(得分:2)

您可以使用reduce来实现

var array = [
      {
        name: 'id',
        type: 'string',
        primary: true
      },
      {
        name: 'notes',
        type: 'text',
        default: '[]'
      },
      {
        name: 'reminders',
        type: 'text',
        default: '[]'
      }
    ]

var result = array.reduce((prev, el) => {
   if (el.default) {
       prev[el.name] = el.default
   }
   return prev;
},{})

console.log(result);

答案 1 :(得分:1)

使用reduce

const arr = [{
    name: 'id',
    type: 'string',
    primary: true
  },
  {
    name: 'notes',
    type: 'text',
    default: '[]'
  },
  {
    name: 'reminders',
    type: 'text',
    default: '[]'
  }
];

const obj = arr.reduce((acc, curr) => curr.default ? { ...acc,
  [curr.name]: curr.default
} : acc);

console.log(obj);

答案 2 :(得分:1)

const data = [
      {
        name: 'id',
        type: 'string',
        primary: true
      },
      {
        name: 'notes',
        type: 'text',
        default: '[]'
      },
      {
        name: 'reminders',
        type: 'text',
        default: '[]'
      }
];

const result = Object.fromEntries(
  data
    .filter(it => "default" in it)
    .map(it => ([it.name, it.default]))
);

console.log(result);

答案 3 :(得分:1)

您可以将filterObject.keys()结合使用。

// Your initial array
const initialArray = [{
        name: 'id',
        type: 'string',
        primary: true
    },
    {
        name: 'notes',
        type: 'text',
        default: '[]'
    },
    {
        name: 'reminders',
        type: 'text',
        default: '[]'
    }
];

// Array just with items that haves a default value
const itensWithDefaultValue = initialArray.filter(item => Object.keys(item).includes('default'));

// Object to save items 
let objectWithValues = {};

// Save items in object with name and you default value
itensWithDefaultValue.map(item => objectWithValues[item.name] = item.default);

console.log(objectWithValues);

希望这会有所帮助!

答案 4 :(得分:1)

您可以将新对象散布到单个对象中。

var data = [{ name: 'id', type: 'string', primary: true }, { name: 'notes', type: 'text', default: '[]' }, { name: 'reminders', type: 'text', default: '[]' }],
    result = Object.assign({}, ...data.map(({ name, default: d }) => d && { [name]: d }));

console.log(result);