javascript - 在数组中按数组排序对象?

标签 javascript jquery arrays sorting local-storage

我有一个如下所示的本地存储:

Key: Savedme        
Value:
{
 "Bob":["1","1"],
 "John":["2","1"],
 "Mom":["3","1"],
 "Dad":["1","2"],
 "Tom":["3","2"],
 "Skipper42":["2","3"],
 "Hated_41":["3","3"],
 "Greeneggs":["2","2"],
 "William":["1","3"]
}

我需要以某种方式对其进行排序,使其看起来像这样

{
 "Bob":["1","1"],
 "Dad":["1","2"],
 "William":["1","3"]
 "John":["2","1"],
 "Greeneggs":["2","2"],
 "Skipper42":["2","3"],
 "Mom":["3","1"],
 "Tom":["3","2"],
 "Hated_41":["3","3"]
}

我试过将它存储在这样的矩阵中:

var $runthrough = [[]];
$runthrough[$x,$y] = $values;

其中 x 是第一组数字,y 是下一组,然后 values 是 Bob、Dad 等...从那里我可以为矩阵的两个部分做一个 foreach 并且它会完成,但是当我在它运行完一组对象后使用此方法,第二组给出“未定义”,即使我已经设置了一些触发器来检查并且它实际上并没有未定义。

var loadarray = JSON.parse(localStorage.getItem( 'savedme' ));
$.each(loadarray, function(k, v) {
     if(typeof k === 'undefined' || !k){
        console.error("undefined found at k!");
    };
     if(typeof v[0] === 'undefined' || !v[0]){
        console.error("undefined found at x!");
    };
     if(typeof v[1] === 'undefined' || !v[1]){
         console.error("undefined found at y!");
    };
});

所以我开始意识到,我可能对数组做错了,所以我认为整理数组然后使用相同的函数会更快。它必须像这样排序,因为它基本上要输出到矩阵表,我试过这样排序:

  {
    "1":["1","Bob"],
    "2":["1","John"],
  } 

但是...索引值 1 会被最后一个值覆盖

最佳答案

您可以使用相同的索引链接值的增量。

var a = [
  { "Bob": ["1", "1"] },
  { "John": ["2", "1"] },
  { "Mom": ["3", "1"] },
  { "Dad": ["1", "2"] },
  { "Tom": ["3", "2"] },
  { "Skipper42": ["2", "3"] },
  { "Hated_41": ["3", "3"] },
  { "Greeneggs": ["2", "2"] },
  { "William": ["1", "3"] }
];

a.sort(function (a, b) {
  var aa = a[Object.keys(a)],
      bb = b[Object.keys(b)];
  if (aa[0] === bb[0]) {
    return aa[1] - bb[1];
  } else {
    return aa[0] - bb[0];
  }
});
document.querySelector("#demo").innerHTML = JSON.stringify(a, null, 4);
<div id="demo"></div>

2021 年更新

const
    array = [{ Bob: ["1", "1"] }, { John: ["2", "1"] }, { Mom: ["3", "1"] }, { Dad: ["1", "2"] }, { Tom: ["3", "2"] }, { Skipper42: ["2", "3"] }, { Hated_41: ["3", "3"] }, { Greeneggs: ["2", "2"] }, { William: ["1", "3"] }];

array.sort((a, b) => {
    const
        aa = Object.values(a)[0],
        bb = Object.values(b)[0];
 
    return aa[0] - bb[0] || aa[1] - bb[1];
});

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 在数组中按数组排序对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30801663/

相关文章:

c# - 如何重新初始化数组?

C:无法理解下面的数组赋值

javascript - 我如何处理发送到 AngularJS Controller 的对象?

javascript - Google OAuth - 使用 "anonymous"作为 key 和 secret 是否不安全?

javascript - 如何通过 javascript 或 jquery 获取下一行列

javascript - 如果在过滤器中返回空值,如何显示 'No Books Found' 行?

jquery - jQuery 树遍历的最佳方法?

php - 根据mysql表行值显示隐藏div

jquery - 获取 popover data-content 中 HTML 标签的元素

ios - 获取一个 NSArray