JS数组 改变问题

let arrA = [{label: 1, value: 'A'},{label: 2, value: 'A'},{label: 3, value: 'A'},{label: 4, value: 'A'},{label: 5, value: 'A'}]
let arrB = [{label: 2, value: 'B'},{label: 4, value: 'B'}]

let arrC = [{label: 1, value: 'A'},{label: 2, value: 'A'},{label: 3, value: 'B'},{label: 4, value: 'B'},{label: 5, value: 'A'}]

已知arrA,arrB,求ArrC?

求解?

阅读 1.8k
3 个回答
let arrA = [{label: 1, value: 'A'},{label: 2, value: 'A'},{label: 3, value: 'A'},{label: 4, value: 'A'},{label: 5, value: 'A'}]
let arrB = [{label: 2, value: 'B'},{label: 4, value: 'B'}]

let arrC = [{label: 1, value: 'A'},{label: 2, value: 'A'},{label: 3, value: 'B'},{label: 4, value: 'B'},{label: 5, value: 'A'}]

let arrBMap = arrB.reduce((acc,cur)=>((acc[cur.value]||=[]).push(cur.label),acc),{});
console.log(arrBMap);// {B:[2, 4]}
arrA.map(item=>(Object.entries(arrBMap).forEach(([key,[start,end]])=>(item.label>start && item.label<=end) && (item.value=key)),item));
0: {label: 1, value: "A"}
1: {label: 2, value: "A"}
2: {label: 3, value: "B"}
3: {label: 4, value: "B"}
4: {label: 5, value: "A"}

image.png

        let arrA = [{label: 1, value: 'A'},{label: 2, value: 'A'},{label: 3, value: 'A'},{label: 4, value: 'A'},{label: 5, value: 'A'}]
        let arrB = [{label: 2, value: 'B'},{label: 4, value: 'B'}]
        let arr = [];
        function getArrayIndex(arr, obj) {
            var i = arr.length;
            while (i--) {
                if (arr[i] === obj) {
                    return i;
                }
            }
            return -1;
        }
        let index = 0
        let index2 = 0
        arrA.map(item=>{
            if(arrB.filter(iitem=>iitem.label==item.label)[0]){
                arr.push(item)
                index = getArrayIndex(arrA,arr[0])+1
                index2 = getArrayIndex(arrA,arr[arr.length-1])
            }
            for(let i = index;i<=index2;i++){      
                if(arrB.filter(iitem=>iitem.label==item.label)[0] !== undefined){
                    arrA[i].value = arrB.filter(iitem=>iitem.label==item.label)[0].value
                }   
            }
        })
        console.log(arrA);

你示例中的arrC 不符合你说的规则

规则:用arrB匹配arrA,当label 相同的时候 ,arrB的value,替换arrA的value

let arrA = [{label: 1, value: 'A'},{label: 2, value: 'A'},{label: 3, value: 'A'},{label: 4, value: 'A'},{label: 5, value: 'A'}]
let arrB = [{label: 2, value: 'B'},{label: 4, value: 'B'}]

const res = [...arrA.filter(item => !arrB.some(r => r.label===item.label)),...arrB]
console.log(res)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题