【问题标题】:How to convert array of string to object?如何将字符串数组转换为对象?
【发布时间】:2020-07-15 09:52:54
【问题描述】:

我有一个数组属性对象。为了获得接受的输出,我做了两个 代码中的方法。

方法1:将显示对象数组而不是对象内部的字符串值数组。
方法 2:将显示我接受的输出。

let data = {
  Invoice: ["can_view", "can_create", "can_edit", "can_delete"],
  license: ["can_view", "can_create", "can_edit", "can_delete"] 
}

问题是我在方法 1 中做了一个额外的循环来获取对象数组。然后它转换为接受数据的方法

我不需要方法 1,我想获取我接受的基于数据的字符串数组。

在方法 2 中应该改变什么?

// 方法一:

 let values = Object.entries(data).map(([key, values]) => ({
      [key]: values.map(v => ({ label: v, value: v }))
    }));
console.log(values)

// 方法:2

 function convertdatatoObj (value,group){
   let permissionAccess;
    let permissionArray = value && value.filter(item => item[group]);
    const permissionObj = Object.assign({}, permissionArray);
    let res =
      permissionObj[0] &&
      permissionObj[0][group] &&
      permissionObj[0][group].map(item => {
        return {
          value: item.value
        };
      });
    const obj = Object.assign({}, res);
    permissionAccess = Object.fromEntries(
      Object.entries(obj) && Object.entries(obj).map(([k, v]) => [v.value, v])
    );
    return permissionAccess;

 }

 let result = convertdatatoObj(values,"Invoice")

console.log(result) 

// My accepeted Output would be this format:

let res = {
can_view: {value: "can_view"},
can_create: {value: "can_create"},
can_edit: {value: "can_edit"},
can_delete: {value: "can_delete"},
}

【问题讨论】:

  • 那么,Method2 中的value 是否应该从一开始就使用data
  • 是的,现在,我正在从方法 1 传递数据,但现在应该是数据

标签: javascript arrays object functional-programming


【解决方案1】:

您可以使用带有映射条目数组的Object.fromEntries

var permissions = ["can_view", "can_create", "can_edit", "can_delete"],
    result = Object.fromEntries(permissions.map(value => [value, { value }]));

console.log(result);

【讨论】:

  • 例如,让 data = { Invoice: ["can_view", "can_create", "can_edit", "can_delete"], license: ["can_view", "can_create""] , } 什么会是代码格式吗?
  • 它的结果应该是什么?
【解决方案2】:

你有对象和名字,你可以得到相应的数组并使用Array#map将它转换成键,这是给定的数组条目,值是{value: <item entry>}。最后,使用Object.fromEntries构造一个对象:

let data = {
  Invoice: ["can_view", "can_create", "can_edit", "can_delete"],
  license: ["can_view", "can_create", "can_edit", "can_delete"]
}

function convertdatatoObj(value, group) {
  if (!value && !Array.isArray(value[group]))
    return;

  return Object.fromEntries(
    value[group].map(permission => [permission, { value: permission }])
  )
}

let result = convertdatatoObj(data, "Invoice")

console.log(result)

可以使用Array#reduce通过每次克隆对象来完成:

let data = {
  Invoice: ["can_view", "can_create", "can_edit", "can_delete"],
  license: ["can_view", "can_create", "can_edit", "can_delete"]
}

function convertdatatoObj(value, group) {
  if (!value && !Array.isArray(value[group]))
    return;

  return value[group]
    .reduce(
      (obj, permission) => ( {...obj, [permission]: { value: permission } } ), 
      {}
    )
}

let result = convertdatatoObj(data, "Invoice")

console.log(result)

或使用Object.assign 改变单个实例:

let data = {
  Invoice: ["can_view", "can_create", "can_edit", "can_delete"],
  license: ["can_view", "can_create", "can_edit", "can_delete"]
}

function convertdatatoObj(value, group) {
  if (!value && !Array.isArray(value[group]))
    return;

  return value[group]
    .reduce(
      (obj, permission) => Object.assign(obj, { [permission]: { value: permission } } ), 
      {}
    )
}

let result = convertdatatoObj(data, "Invoice")

console.log(result)

【讨论】:

猜你喜欢
  • 2022-10-07
  • 2011-12-27
  • 2023-03-28
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多