【问题标题】:Multi-Select Input - Find added and remove items Javascript多选输入 - 查找添加和删除项目 Javascript
【发布时间】:2020-04-27 12:25:38
【问题描述】:

我有 2 个数据集 newoldOld是编辑前输入的字段,new是更新后的列表。

我需要删除已删除的条目 我需要添加新条目

[
    {"title":"40k","value":1},
    {"title":"Fantasy","value":2},
    {"title":"Space Hulk","value":4}
]

[
    {"title":"40k","value":1},
    {"title":"Fantasy","value":2},
    {"title":"Age of Sigma","value":3}
]

返回的数据应该是这样的:

[{"title":"Age of Sigma","value":3}] //Save Data
[{"title":"Space Hulk","value":4}]   //Delete Data

我曾经查找删除的项目,但是当我这样做时,数据库中只有 2 个条目。我把脑雾归咎于 3 个月的宝宝!

export const findRemovedItems = (newData, oldData) =>
   oldData.filter(item => newData.map(checkItem => item.value !== checkItem.value).includes(true))

【问题讨论】:

    标签: javascript arrays data-manipulation


    【解决方案1】:
    oldData.filter(i => !newData.some(j => j.value=== i.value))
    

    【讨论】:

    • 我最喜欢这个解决方案,但 Ori 直接回答了这个问题。不过谢谢
    【解决方案2】:

    为每个数组创建一组唯一对象(在您的情况下为title)属性。使用 Set to of old 过滤新的,反之亦然:

    const getSetByKey = (arr, key) => new Set(arr.map(o => o[key]));
    const filterBySet = (arr, set, key) => arr.filter(o => !set.has(o[key]));
    
    const fn = (a, b, key) => {
      const aMap = getSetByKey(a, key);
      const bMap = getSetByKey(b, key);
    
      return {
        save: filterBySet(b, aMap, key),
        remove: filterBySet(a, bMap, key),
      };
    };
    
    const oldArr = [
      {"title":"40k","value":1},
      {"title":"Fantasy","value":2},
      {"title":"Space Hulk","value":4}
    ]
    const NewArr = [
      {"title":"40k","value":1},
      {"title":"Fantasy","value":2},
      {"title":"Age of Sigma","value":3}
    ]
    
    const result = fn(oldArr, NewArr, 'title');
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 2014-07-09
      相关资源
      最近更新 更多