为了账号安全,请及时绑定邮箱和手机立即绑定

.sort() 在数组上不起作用 ( javascript)

.sort() 在数组上不起作用 ( javascript)

ITMISS 2022-08-18 10:52:57
我正在尝试通过首先创建对象来使数据更易于管理,从而将“新发货”数组与当前库存数组合并。因此,任何相同的物品都会添加到库存中的任何现有物品中。.sort 运行,但 flat 似乎不执行任何操作。我怀疑存在某种与我如何制作数组和弄乱索引有关的问题?function updateInventory(arr1, arr2) {    let invObj = {}    let updateObj = {}    let result = []    arr1.forEach( x => invObj[x[1]] = x[0])    arr2.forEach( x => updateObj[x[1]] = x[0])    for(let key in updateObj) {        if (invObj[key]) {            invObj[key] += updateObj[key]        } else {            invObj[key] = updateObj[key]        }    }    result =  Object.keys(invObj).map(key=>[invObj[key],key])    .sort((a,b)=>{    // attempting to sort inventory alphabetically here as required by my course's test        return a[1] - b[1]    })    return result}var curInv = [    [21, "Bowling Ball"],    [2, "Dirty Sock"],    [1, "Hair Pin"],    [5, "Microphone"]];var newInv = [    [2, "Hair Pin"],    [3, "Half-Eaten Apple"],    [67, "Bowling Ball"],    [7, "Toothpaste"]];console.log(updateInventory(curInv, newInv));
查看完整描述

4 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

在对字符串值进行排序时,应使用该方法。localeCompare


function updateInventory (arr1, arr2) {

  let invObj = {};

  let updateObj = {};

  let result = [];


  arr1.forEach(x => invObj[x[1]] = x[0]);

  arr2.forEach(x => updateObj[x[1]] = x[0]);


  for (let key in updateObj) {

    if (invObj[key]) {

      invObj[key] += updateObj[key];

    } else {

      invObj[key] = updateObj[key];

    }

  }


  result = Object.keys(invObj)

    .sort((a, b) => a.localeCompare(b))

    .map(key => [invObj[key], key]);


  return result;

}


var curInv = [

  [21, 'Bowling Ball'],

  [2, 'Dirty Sock'],

  [1, 'Hair Pin'],

  [5, 'Microphone']

];


var newInv = [

  [2, 'Hair Pin'],

  [3, 'Half-Eaten Apple'],

  [67, 'Bowling Ball'],

  [7, 'Toothpaste']

];


console.log(

  updateInventory(curInv, newInv)

);


查看完整回答
反对 回复 2022-08-18
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

您是否希望数组与第一个实例中的数据格式相同?


function updateInventory(arr1, arr2) {

    let invObj = {}

    let updateObj = {}

    let result = []


    arr1.forEach( x => invObj[x[1]] = x[0])

    arr2.forEach( x => updateObj[x[1]] = x[0])


    for(let key in updateObj) {

        if (invObj[key]) {

            invObj[key] += updateObj[key]

        } else {

            invObj[key] = updateObj[key]

        }

    }

    

    return invObj;

}

var curInv = [

    [21, "Bowling Ball"],

    [2, "Dirty Sock"],

    [1, "Hair Pin"],

    [5, "Microphone"]

];


var newInv = [

    [2, "Hair Pin"],

    [3, "Half-Eaten Apple"],

    [67, "Bowling Ball"],

    [7, "Toothpaste"]

];


console.log(updateInventory(curInv, newInv));


查看完整回答
反对 回复 2022-08-18
?
jeck猫

TA贡献1909条经验 获得超7个赞

我会创建一个查找对象并保留对数组项的引用。在循环访问当前项目后,我将循环访问新项目。检查它是否存在并更新计数。如果不存在,则将物料添加到库存中。


var curInv = [

    [21, "Bowling Ball"],

    [2, "Dirty Sock"],

    [1, "Hair Pin"],

    [5, "Microphone"]

];


var newInv = [

    [2, "Hair Pin"],

    [3, "Half-Eaten Apple"],

    [67, "Bowling Ball"],

    [7, "Toothpaste"]

];


// make a look up object to reference by the key

var lookup = curInv.reduce( (obj, item) => ({ ...obj, [item[1]]: item }), {})


// loop over the new inventory and add it on

newInv.forEach((item) => {

  // check to see if we have the item

  var key = item[1]

  var exisiting = lookup[key]

  // if exists add it

  if (exisiting) {

    exisiting[0] += item[0]

  } else {

    // new item

    // add to our look up table in case it repeats

    lookup[key] = item

    // add it to the inventory list

    curInv.push(item)

  }

})


console.log(curInv)


查看完整回答
反对 回复 2022-08-18
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

对字符串进行排序时,它有点复杂,因为您还必须考虑大小写。这是我在js中制作的表格中的一个片段,希望它有所帮助。您也可以像 taplar 所说的那样使用 localecompare。


            .sort(

                function(a,b) {

                    a = a[1];

                    b = b[1];

                    if (a < b) {

                        return -1; 

                    } else if (a > b) {

                        return 1;

                    } else {

                        return 0; // Equal

                    }

                });


查看完整回答
反对 回复 2022-08-18
  • 4 回答
  • 0 关注
  • 381 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号