【问题标题】:How to remove duplicate array of object property in javascript?如何在javascript中删除重复的对象属性数组?
【发布时间】:2020-03-18 08:08:13
【问题描述】:
const words = [{value:"can_view",rolename:"group"},
{value:"can_create",rolename:"group"},

{value:"can_create",rolename:"top"}]; {value:"can_delete",rolename:"group"}];

{value:"can_delete",rolename:"top"}];

我正在尝试从对象数组中获取价值。我想获得这种格式的价值

        Accepted Value: {
         group:["can_view","can_create"],
         top:["can_delete"]
        }

我还想从输出中删除基于角色名的字符串数组。例如,“can_create”,can_delete 仅从组属性中删除。 这是我的密码框:https://codesandbox.io/s/fragrant-http-v35lf

【问题讨论】:

  • 在你的例子中没有重复
  • 请更清楚,显示输入和预期输出

标签: javascript arrays reactjs object


【解决方案1】:

您可以使用Array#reduce

const words = [{value:"can_view",rolename:"group"},{value:"can_create",rolename:"group"},{value:"can_delete",rolename:"top"}];

const res =  words.reduce((acc,{rolename,value})=>{
   acc[rolename] = acc[rolename] || [];
   acc[rolename].push(value);
   return acc
},{});


console.log(res)

【讨论】:

  • 如果用户想通过使用 onclick 事件从 "group": [ "can_view", "can_create" ] 中删除字符串数组,我该怎么做?
  • 请在小提琴中发布您的 html 和点击事件,并且您希望结果我会改变
  • codesandbox.io/s/fragrant-http-v35lf我给你codesanbox链接,我正在使用react
  • 你的代码看起来不错。但你的问题仍然不清楚。你能详细说明一下
  • 用户点击复选框,每个复选框将根据角色名赋予can_view、can_create等值,用户可以删除can_view、can_create点击复选框
【解决方案2】:

使用一个简单的 for 循环来完成这项工作。您需要在此处按角色名称分组。

沙盒:https://codesandbox.io/s/compassionate-bas-fg1c2

 const words = [
  { value: "can_view", rolename: "group" },
  { value: "can_create", rolename: "group" },
  { value: "can_delete", rolename: "top" },
  { value: "can_delete", rolename: "group" }
];

const result = {};
for (const { value, rolename } of words) {
  if (!result[rolename]) result[rolename] = [];
  result[rolename].push(value);
}

function removeElement(obj, arr) {
 for (var key of Object.keys(result)) {
    if (key === obj) {
      result[key] = result[key].filter(i => !arr.includes(i));
    }
  }
  return result;
}

const modified = removeElement("group", ["can_delete"]);
console.log(modified);

【讨论】:

  • 如果用户想在创建此格式后使用 onclick 事件从“组”中删除字符串数组:[“can_view”,“can_create”],我该怎么做?我的意思是当用户点击事件 - group:["can_view"]
  • 字符串数组?请举个例子
  • 这里是输出:{ "group": [ "can_view", "can_create" ], "top": [ "can_delete" ] } ,但我想删除can_view,can_create和can_create基于角色名并添加新值 can_create Accepeted Value:{ "group": [], "top": [ "can_delete","can_create" ] } ,
  • [{top:"can_create",group:"can_create}] 我只想从顶部删除 can_create,而不是所有其他对象。
  • 可以自己尝试一下,我可以指导你,以防你哪里出错
猜你喜欢
  • 1970-01-01
  • 2015-12-14
  • 2018-03-28
  • 2021-06-18
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
相关资源
最近更新 更多