假设我有一个这样的对象列表:

let b = [
  {
    name: "test1", 
    connectedTo: "",
  },
  {
    name: "test1",
    connectedTo: "test1.test2.test3"
  },
  {
    name: "test2",
    connectedTo: "",
  },
  {
    name: "test3",
    connectedTo: "",
  }
]

我想得到name个没有重复的元素,如果有重复的元素,也要得到一个没有空connectedTo的元素.从上面的例子来看,我期望的结果是:

let result = [
  {
    name: "test1",
    connectedTo: "test1.test2.test3"
  },
  {
    name: "test2",
    connectedTo: "",
  },
  {
    name: "test3",
    connectedTo: "",
  }
]

推荐答案

下面是一种利用Array#reduce函数的方法:

let b = [
  {
    name: "test1", 
    connectedTo: "",
  },
  {
    name: "test1",
    connectedTo: "test1.test2.test3"
  },
  {
    name: "test2",
    connectedTo: "",
  },
  {
    name: "test3",
    connectedTo: "test1.test2",
  },
  {
    name: "test3",
    connectedTo: "",
  }
];

const result = Object.values(b.reduce((acc, cur) => {
  if(!acc[cur.name] || !acc[cur.name].connectedTo)
    acc[cur.name] = cur;
  return acc;
}, {}));

console.log(result);

Javascript相关问答推荐

是什么原因导致此Angular 16应用程序中类型错误时属性结果不存在?

如何在使用fast-xml-parser构建ML时包括属性值?

如何避免移动设备中出现虚假调整大小事件?

react/redux中的formData在expressjs中返回未定义的req.params.id

如何修复我的js构建表每当我添加一个额外的列作为它的第一列?

为什么!逗号和空格不会作为输出返回,如果它在参数上?

使用Java脚本导入gltf场景并创建边界框

try 使用javascript隐藏下拉 Select

映射类型定义,其中值对应于键

TinyMCE 6导致Data:Image对象通过提供的脚本过度上载

未捕获的运行时错误:调度程序为空

基于产品ID更新条带产品图像的JavaScript命中错误

Node.js错误: node 不可单击或不是元素

MongoDB通过数字或字符串过滤列表

如何使用[ModelJSON,ArrayBuffer]调用tf.loadGraphModelSync

P5play SecurityError:无法从';窗口';读取命名属性';Add';:阻止具有源的帧访问跨源帧

使用python,我如何判断一个html复选框是否被隐藏,以及它是否被S选中?

由于http.get,*ngIf的延迟很大

如何使用Angular JS双击按钮

This.forceUPDATE并通过Reaction-Router-DOM链接组件传递状态