下面是比较和操作originalArrayreferenceArray个选项

const referenceArray = [
                       { name: 'animal', source: ['duck', 'cat'], target: ['water', 'ground'] },
                       { name: 'car', source: ['tata', 'kia'], target: ['tiago', 'sector'] },
                       { name: 'bike', source: ['honda', 'hero'], target: ['livo', 'xtream'] },
                       { name: 'vehicle', source: ['honda', 'hero'], target: ['hard', 'soft'] },
                       ];

这是我想在referenceArray source And target的帮助下更改数组originalArray的源和目标值

const originalArray = [
    { source: 'water', target: 'hero' },
    { source: 'tata', target: 'ground' },
    { source: 'livo', target: 'kia' },
    { source: 'hero', target: 'sector' },
  ];

所需的预期输出:

 const output1 = [
    { source: 'animal', target: ['bike', 'vehicle'] },
    { source: 'car', target: 'animal' },
    { source: 'bike', target: 'car' },
    { source: ['vehicle', 'bike'], target: 'car' },
  ];


 const output2 = [
    { source: 'animal', target: 'bike' },
    { source: 'animal', target: 'vehicle' },
    { source: 'car', target: 'animal' },
    { source: 'bike', target: 'car' },
    { source: 'vehicle', target: 'car' },
    { source: 'bike', target: 'car' },
  ];

两种输出均可接受,但最好是output2.

我不知道如何实现这种格式而不产生关键值冲突.

推荐答案

以下可能是实现预期目标的一种可能的解决方案(Output-2,来自上述问题).

Code Snippet

// get output in format-2
const getOutput2 = (refArr, arr) => (
  arr.flatMap(        // iterate using ".flatMap" to avoid nested result
    ({ source : osrc, target : otgt }) => (
      refArr.filter(      // filter for "source" using ref-arr
        ob => ob?.source.includes(osrc) || ob?.target.includes(osrc)
      ).sort(             // sort descending to match order of output-2
        (a, b) => b.name > a.name ? 1 : -1
      ).flatMap(          // for each "source", iterate using ".flatMap"
        ob => refArr.filter(    // filter for "target" 
          ob2 => ob2?.source.includes(otgt) || ob2?.target.includes(otgt)
        ).sort(           // sort ascending to match order of output-2
          (a, b) => a.name > b.name ? 1 : -1
        ).map(ob2 => ({         // construct the desired objective array
          source: ob.name, target: ob2.name
        }))
      )
    )
  )
);

// reference array from question
const referenceArray = [{
    name: 'animal',
    source: ['duck', 'cat'],
    target: ['water', 'ground']
  },
  {
    name: 'car',
    source: ['tata', 'kia'],
    target: ['tiago', 'sector']
  },
  {
    name: 'bike',
    source: ['honda', 'hero'],
    target: ['livo', 'xtream']
  },
  {
    name: 'vehicle',
    source: ['honda', 'hero'],
    target: ['hard', 'soft']
  },
];

// original array from question
const originalArray = [{
    source: 'water',
    target: 'hero'
  },
  {
    source: 'tata',
    target: 'ground'
  },
  {
    source: 'livo',
    target: 'kia'
  },
  {
    source: 'hero',
    target: 'sector'
  },
];

// log the results to console for verification
console.log(getOutput2(referenceArray, originalArray));
.as-console-wrapper { max-height: 100% !important; top: 0; }

Explanation

在上面的代码段中内联添加的注释

Javascript相关问答推荐

订阅操作顺序

Mongodb拥有5亿个文档,我想根据JavaScript驱动程序中的两个字段使用regEx进行搜索,而不是模式

如何指定1条记录1个表?

如何在JavaScript中通过一次单击即可举办多个活动

具有相同参数的JS类

Angular中计算信号和getter的区别

Promise Chain中的第二个useState不更新

变量的值在Reaction组件中的Try-Catch语句之外丢失

如何在每次单击按钮时重新加载HighChart/设置HighChart动画?

对网格项目进行垂直排序不起作用

对路由DOM嵌套路由作出react

如何在ASP.NET项目中使用Google Chart API JavaScript将二次轴线值格式化为百分比

在Reaction中的handleSubmit按钮内,useSelector值仍然为空

获取';无法解决导入和导入";slick-carousel/slick/slick-theme.css";';错误

使用插件构建包含chart.js提供程序的Angular 库?

触发异步函数后不能显示数据

如果没有页面重新加载Angular ,innerHTML属性绑定不会更新

FireBase FiRestore安全规则-嵌套对象的MapDiff

Pevent触发material 用户界面数据网格中的自动保存

本地损坏的Java脚本