【问题标题】:javascript 2D array vlaue exchangejavascript 二维数组值交换
【发布时间】:2025-12-11 20:50:01
【问题描述】:

我想比较两个数组并将数组值替换为相同的属性值。

let first_array =[{ model: 'aa', size: '85(XS)', count: 200, number: '10-2' },{ model: 'bb', size: '105(XL)', count: 150, number: '' },{ model: 'cc', size: '95(M)', count: 100, number: '9-2' },{ model: 'dd', size: '85(XS)', count: 50, number: '' }]

let second_array = [{ model: 'aa', size: '85(XS)', count: 1, number: '' },{ model: 'bb', size: '105(XL)', count: 1, number: '' },{ model: 'cc', size: '95(M)', count: 2, number: '' },{ model: 'dd', size: '85(S)', count: 3, number: '' },{ model: 'dd', size: '80(XS)', count: , number: '' }]

假设有两个数组。 比较'a'和'b'数组,和'model'一样的'size'把'a'数组的count值插入到'b'数组的count值中,错误的标记为null .

这就是我想要的。

let vlaue = [{ model: 'aa', size: '85(XS)', count: 200, number: '10-2' },{ model: 'bb', size: '105(XL)', count: 150, number: '' },{ model: 'cc', size: '95(M)', count: 100, number: '9-2' },{ model: 'dd', size: '85(XS)', count: 50, number: '' }]

这是我试过的代码。

for (var j = 0; j<second_array.length;j++){

  for(var i = 0; i < first_array.length ;i++){
    var count = false 
    
    if(second_array[j]["model"]+second_array[j]["size"] === first_array[i]){
       
       count = true

    }else{

       count = false

    }

    if(count == true){
        if(objectdata[first_array[i]]["count"] === 0){
          second_array[j]["count"] = ""
          second_array[j]["number"] = ""
        }else{
            second_array[j]["count"] = objectdata[first_array[i]]["count"];
             second_array[j]["number"] = objectdata[first_array[i]]["number"];
        }
        
       
        break
    }else{
        second_array[j]["count"] = ""
        second_array[j]["number"] = ""
    }

} }

【问题讨论】:

    标签: javascript arrays sorting arraylist


    【解决方案1】:

      let first_array =[{ model: 'aa', size: '85(XS)', count: 200, number: '10-2' },{ model: 'bb', size: '105(XL)', count: 150, number: '' },{ model: 'cc', size: '95(M)', count: 100, number: '9-2' },{ model: 'dd', size: '85(XS)', count: 50, number: '' }]
    
      let second_array = [{ model: 'aa', size: '85(XS)', count: 1, number: '' },{ model: 'bb', size: '105(XL)', count: 1, number: '' },{ model: 'cc', size: '95(M)', count: 2, number: '' },{ model: 'dd', size: '85(S)', count: 3, number: '1' }]
     
      let value=[]; 
    
      for(let i = 0 ; i<first_array.length ; i++){
      
      value.push({
      name:first_array[i].model ? first_array[i].model :second_array[i].model,
      size: first_array[i].size ?first_array[i].size :second_array[i].size,
      count: first_array[i].count ?first_array[i].count :second_array[i].count,
      number: first_array[i].number ?first_array[i].number :second_array[i].number,
      })
      
    }
    console.log(value)
      let first_array =[{ model: 'aa', size: '85(XS)', count: 200, number: '10-2' },{ model: 'bb', size: '105(XL)', count: 150, number: '' },{ model: 'cc', size: '95(M)', count: 100, number: '9-2' },{ model: 'dd', size: '85(XS)', count: 50, number: '' }]
    
      let second_array = [{ model: 'aa', size: '85(XS)', count: 1, number: '' },{ model: 'bb', size: '105(XL)', count: 1, number: '' },{ model: 'cc', size: '95(M)', count: 2, number: '' },{ model: 'dd', size: '85(S)', count: 3, number: '1' }]
     
      let value=[]; 
    
      for(let i = 0 ; i<first_array.length ; i++){
      
      value.push({
      name:first_array[i].model ? first_array[i].model :second_array[i].model,
      size: first_array[i].size ?first_array[i].size :second_array[i].size,
      count: first_array[i].count ?first_array[i].count :second_array[i].count,
      number: first_array[i].number ?first_array[i].number :second_array[i].number,
      })
      
    }
    console.log(value)
    

    【讨论】:

      【解决方案2】:

      let first_array = [{
        model: 'aa',
        size: '85(XS)',
        count: 200,
        number: '10-2'
      }, {
        model: 'bb',
        size: '105(XL)',
        count: 150,
        number: ''
      }, {
        model: 'cc',
        size: '95(M)',
        count: 100,
        number: '9-2'
      }, {
        model: 'dd',
        size: '85(XS)',
        count: 50,
        number: ''
      }]
      let second_array = [{
        model: 'aa',
        size: '85(XS)',
        count: 1,
        number: ''
      }, {
        model: 'bb',
        size: '105(XL)',
        count: 1,
        number: ''
      }, {
        model: 'cc',
        size: '95(M)',
        count: 2,
        number: ''
      }, {
        model: 'dd',
        size: '85(S)',
        count: 3,
        number: ''
      }, {
        model: 'dd',
        size: '80(XS)',
        count: '',
        number: ''
      }]
      let desired = [{
          model: 'aa',
          size: '85(XS)',
          count: 200,
          number: '10-2'
        },
        {
          model: 'bb',
          size: '105(XL)',
          count: 150,
          number: ''
        },
        {
          model: 'cc',
          size: '95(M)',
          count: 100,
          number: '9-2'
        },
        {
          model: 'dd',
          size: '85(XS)',
          count: 50,
          number: ''
        }
      ]
      
      const dict = second_array.reduce((map, {
        model,
        size,
        count,
        number
      }) => ({
        ...map,
        [`${model}${size}`]: {
          count,
          number
        }
      }), {})
      
      const newArray = first_array.map(({
        model,
        size,
        count,
        number
      }) => ({
        model,
        size,
        count: count ?? dict[`${model}${size}`]?.count,
        number: number ?? dict[`${model}${size}`]?.number,
      }))
      
      // output:
      console.log(newArray)
      // desired:
      console.log(desired)
      // match:
      console.log(JSON.stringify(newArray) === JSON.stringify(desired))

      【讨论】: