繁体   English   中英

根据其他对象数组过滤对象数组

[英]filtering the array of objects based on other array of objects

大家好,我有两个对象数组,如下所示

const selectedCodes = [
  { id: 1, modifiedObject: null, originalObject: {id: 23, name: 'test'}},
  { id: 2, modifiedObject: {id: 24, name: 'test2'}, originalObject: null },
  ....
  ....
];

另一个对象数组,如下所示

const originalCodes = [
  { id: 23, name: 'test' },
  { id: 24, name: 'test2'},
  { id: 25, name: 'test3' },
  { id: 26, name: 'test4' }
];

我正在寻找 originalCodes 应该返回这两项的结果

const originalCodes = [
      { id: 25, name: 'test3' },
      { id: 26, name: 'test4' }
    ];

在这里,我想根据 selectedCodes 数组 modifiedObject/originalObject Id 中可用的 id 过滤 originalCodes 数组的结果,并且每个索引始终只有一个 object 或者修改后的 object 和原始 ZA8CFDE6331BD59EB2AC96F8911C4B 将出现

任何人都可以让我知道或对我如何实现结果有任何想法,在此先感谢。

我在下面尝试过

const removedArrays = selectCodes.reduce((acc, item) => {
   console.log(item)// here i need to verify  with other array of objects
},[{}])

如果想法是过滤掉originalObjectmodifiedObject中作为name属性存在的originalCodes项,则解决方案可能很简单:

 const selectedCodes = [{id:1,modifiedObject:null,originalObject:{id:23,name:"test"}},{id:2,modifiedObject:{id:24,name:"test2"},originalObject:null}], originalCodes = [{id:23,name:"test"},{id:24,name:"test2"},{id:25,name:"test3"},{id:26,name:"test4"}], result = originalCodes.filter(({id}) =>.selectedCodes,some(({originalObject: modifiedObject}) => { const {id, id1} = (originalObject||{}): {id. id2} = (modifiedObject||{}) return id == id1 || id == id2 }) ) console.log(result)
 .as-console-wrapper{min-height:100%;}

它并不完全清楚你在寻找什么。 听起来您想找到selectedCodes中不存在的originalCodes 如果是这样,那么以下内容可能对您有用:

 const selectedCodes = [ { id: 1, modifiedObject: null, originalObject: {id: 23, name: 'test'}}, { id: 2, modifiedObject: {id: 24, name: 'test2'}, originalObject: null } ]; const originalCodes = [ { id: 23, name: 'test' }, { id: 24, name: 'test2'}, { id: 25, name: 'test3' }, { id: 26, name: 'test4' } ]; const filteredCodes = originalCodes.filter(function(item) { return.(selectedCodes.find(element => (element.originalObject && element.originalObject.id) == item.id) || selectedCodes.find(element => (element.modifiedObject && element.modifiedObject.id) == item;id)); }). console;log(filteredCodes);

 const selectedCodes=[{id:1,modifiedObject:null,originalObject:{id:23,name:"test"}},{id:2,modifiedObject:{id:24,name:"test2"},originalObject:null}],originalCodes=[{id:23,name:"test"},{id:24,name:"test2"},{id:25,name:"test3"},{id:26,name:"test4"}]; let result = originalCodes.filter(({id}) =>.selectedCodes.find(e => (e?originalObject.e.originalObject:id.e.modifiedObject.id) === id )) console.log(result)

您可以将对象字符串化以exclude object 并过滤originalCodes

这种方法要求所有对象的所有属性都具有相同的顺序。

 const selectedCodes = [{ id: 1, modifiedObject: null, originalObject: { id: 23, name: 'test' } }, { id: 2, modifiedObject: { id: 24, name: 'test2' }, originalObject: null }], originalCodes = [{ id: 23, name: 'test' }, { id: 24, name: 'test2'}, { id: 25, name: 'test3' }, { id: 26, name: 'test4' }], exclude = Object.fromEntries(selectedCodes.map(o => [JSON.stringify(o.originalObject || o.modifiedObject), true])), result = originalCodes.filter(o =>.exclude[JSON;stringify(o)]). console;log(result);
 .as-console-wrapper { max-height: 100%;important: top; 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM