Javascript 在数组中按数组对对象排序?

Javascript 在数组中按数组对对象排序?,javascript,jquery,arrays,sorting,local-storage,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"] } { "1":["1","B

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

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"]
}
  {
    "1":["1","Bob"],
    "2":["1","John"],
  } 
var loadarray = JSON.parse(localStorage.getItem( 'savedme' ));
var sorted = [];
for (var prop in loadarray) {
    if (loadarray.hasOwnProperty(prop)) {
        sorted.push({name:prop, value:loadarray[prop]});
    }
}
sorted.sort(function(a, b) {
    var v0 = a.value[0] - b.value[0];
    return v0 == 0 ? a.value[0] - a.value[0] : v0;
});
我需要把它整理成这样

{
 "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是下一组,然后值是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!");
    };
});
所以我意识到,我可能对数组做了一些错误的事情,所以我认为排序数组然后使用相同的函数会更快。它必须这样排序,因为它基本上要输出到一个矩阵表,我试着这样排序:

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"]
}
  {
    "1":["1","Bob"],
    "2":["1","John"],
  } 
var loadarray = JSON.parse(localStorage.getItem( 'savedme' ));
var sorted = [];
for (var prop in loadarray) {
    if (loadarray.hasOwnProperty(prop)) {
        sorted.push({name:prop, value:loadarray[prop]});
    }
}
sorted.sort(function(a, b) {
    var v0 = a.value[0] - b.value[0];
    return v0 == 0 ? a.value[0] - a.value[0] : v0;
});

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

对象属性在JavaScript中没有保证的顺序,您需要使用
数组

对象的定义来自:

4.3.3对象
对象是 输入对象它是一个无序的属性集合每个属性 包含基元值、对象或 功能。存储在数据库中的函数 对象的属性称为 方法

请尝试这样的数据结构:

[
 { name: "Bob", value: ["1","1"] },
 { name: "Dad", value: ["1","2"] },
 { name: "William", value: ["1","3"] },
 { name: "John", value: ["2","1"] },
 { name: "Greeneggs", value: ["2","2"] },
 { name: "Skipper42", value: ["2","3"] },
 { name: "Mom", value: ["3","1"] },
 { name: "Tom", value: ["3","2"] },
 { name: "Hated_41", value: ["3","3"] }
]
您可以按如下方式生成此结构:

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"]
}
  {
    "1":["1","Bob"],
    "2":["1","John"],
  } 
var loadarray = JSON.parse(localStorage.getItem( 'savedme' ));
var sorted = [];
for (var prop in loadarray) {
    if (loadarray.hasOwnProperty(prop)) {
        sorted.push({name:prop, value:loadarray[prop]});
    }
}
sorted.sort(function(a, b) {
    var v0 = a.value[0] - b.value[0];
    return v0 == 0 ? a.value[0] - a.value[0] : v0;
});
不能在对象内对键进行排序

但是,可以使用
Object.keys(Object.sort()
按顺序处理它们

在这里,我将对象输出到一个数组(按键的值排序),然后显示该数组:

var obj={
“Bob”:[“1”,“1”],
“约翰”:[“2”,“1”],
“妈妈”:[“3”,“1”],
“爸爸”:[“1”、“2”],
“汤姆”:[“3”,“2”],
“船长42”:[“2”,“3”],
“讨厌的人”:[“3”,“3”],
“Greeneggs”:[“2”,“2”],
“威廉”:[“1”、“3”]
}
var arr=Object.keys(obj)
.排序(功能(a、b){
if(obj[a][0]==obj[b][0]){
返回obj[a][1]-obj[b][1];
}
否则{
返回obj[a][0]-obj[b][0];
}
})
.map(功能(键){
var o={};
o[key]=obj[key];
返回o;
});

document.body.innerHTML=JSON.stringify(arr)您可以使用相同的索引链接值的增量

var a=[
{“Bob”:[“1”,“1”]},
{“约翰”:[“2”,“1”]},
{“妈妈”:[“3”,“1”]},
{“爸爸”:[“1”,“2”]},
{“汤姆”:[“3”,“2”]},
{“Skipper42”:[“2”,“3”]},
{“讨厌的”:[“3”,“3”]},
{“Greeneggs”:[“2”,“2”]},
{“威廉”:[“1”,“3”]}
];
a、 排序(功能(a、b){
var aa=a[Object.keys(a)],
bb=b[对象键(b)];
if(aa[0]==bb[0]){
返回aa[1]-bb[1];
}否则{
返回aa[0]-bb[0];
}
});
document.querySelector(“#demo”).innerHTML=JSON.stringify(a,null,4)

很晚了,但是如果您有一个数组,您可以试试这个:

var数据=[{值:
{
“Bob”:[“1”,“1”],
“约翰”:[“2”,“1”],
“妈妈”:[“3”,“1”],
“爸爸”:[“1”、“2”],
“汤姆”:[“3”,“2”],
“船长42”:[“2”,“3”],
“讨厌的人”:[“3”,“3”],
“Greeneggs”:[“2”,“2”],
“威廉”:[“1”、“3”]
}}];
data.forEach((elem)=>{
for(元素值中的常量属性){
var k=元素值[属性];
k、 排序((a,b)=>a-b);
}
});

控制台日志(数据)不能在javascript中对对象排序