JS修改多个数组的交集的值

JS如何修改多个数组的交集的值

想在数组里取出所有的交集,然后修改交集某一个值
entities: [
    {
        container: [
            { no: 111, name: 1111, status: 0 },
            { no: 222, name: 2222, status: 0 },
            { no: 333, name: 3333, status: 0 },
            { no: 444, name: 4444, status: 0 },
        ]
    },
    {
        container: [
            { no: 111, name: 1111, status: 0 },
            { no: 222, name: 2222, status: 0 }
        ]
    },
    {
        container: [
            { no: 111, name: 1111, status: 0 },
            { no: 333, name: 3333, status: 0 }
        ]
    }
]

变为:


entities: [
    {
        container: [
            { no: 111, name: 1111, status: 1 },
            { no: 222, name: 2222, status: 1 },
            { no: 333, name: 3333, status: 1 },
            { no: 444, name: 4444, status: 0 },
        ]
    },
    {
        container: [
            { no: 111, name: 1111, status: 1 },
            { no: 222, name: 2222, status: 1 }
        ]
    },
    {
        container: [
            { no: 111, name: 1111, status: 1 },
            { no: 333, name: 3333, status: 1 }
        ]
    }
]
阅读 2.7k
3 个回答

js循环遍历替换

let entities = [
  {
    container: [
      { no: 111, name: 1111, status: 0 },
      { no: 222, name: 2222, status: 0 },
      { no: 333, name: 3333, status: 0 },
      { no: 444, name: 4444, status: 0 },
    ]
  },
  {
    container: [
      { no: 111, name: 1111, status: 0 },
      { no: 222, name: 2222, status: 0 }
    ]
  },
  {
    container: [
      { no: 111, name: 1111, status: 0 },
      { no: 333, name: 3333, status: 0 }
    ]
  }
]
let entitiesAll = entities.reduce((a, b) => {
  return {
    container: a.container.concat(b.container)
  }
}).container
entitiesAll.forEach(item => {
  let same = entitiesAll.filter(entity => entity.no === item.no).length
  same > 1 && (item.status = 1)
})

console.log(entities)
function union(arr) {
    if (Array.isArray(arr)) {
        var temp = [];
        for (var i = 0; i < arr.length; ++i) {
            var container = arr[i].container;
            Array.prototype.push.apply(temp, container);
        }
        for (var i = temp.length; i--;) {
            var right = temp[i];
            for (var j = i - 1; j >= 0; --j) {
                var left = temp[j];
                if (left.no === right.no && left.name === right.name) {
                    if (!left.status) left.status++;
                    if (!right.status) right.status++;
                }
            }
        }
    }
    return arr;
}
var entities = [
    {
        container: [
            { no: 111, name: 1111, status: 0 },
            { no: 222, name: 2222, status: 0 },
            { no: 333, name: 3333, status: 0 },
            { no: 444, name: 4444, status: 0 },
        ]
    },
    {
        container: [
            { no: 111, name: 1111, status: 0 },
            { no: 222, name: 2222, status: 0 }
        ]
    },
    {
        container: [
            { no: 111, name: 1111, status: 0 },
            { no: 333, name: 3333, status: 0 }
        ]
    }
];
console.log(union(entities));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题