我有一个像这样的json:
[
{
"tipe": "foo1",
"color": "red",
"size": 92,
"seq": 1,
"hasil": 0
},
{
"tipe": "foo2",
"color": "red",
"size": 92,
"seq": 2,
"hasil": 1
},
{
"tipe": "foo3",
"color": "red",
"size": 92,
"seq": 3,
"hasil": 0
}
]
我想将hasil = 1
中json的结构重新定位到最后位置,并保留seq值,
我在问这里之前已经研究过,遗憾的是我不知道这个问题的正确关键字。
目的:
[
{
"tipe": "foo1",
"color": "red",
"size": 92,
"seq": 1,
"hasil": 0
},
{
"tipe": "foo3",
"color": "red",
"size": 92,
"seq": 2,
"hasil": 0
},
{
"tipe": "foo2",
"color": "red",
"size": 92,
"seq": 3,
"hasil": 1
}
]
有一种方法可以实现吗?
答案 0 :(得分:1)
只需sort具有用户功能的数组
var array = [
{
"tipe": "foo1",
"color": "red",
"size": 92,
"seq": 1,
"hasil": 0
},
{
"tipe": "foo2",
"color": "red",
"size": 92,
"seq": 2,
"hasil": 1
},
{
"tipe": "foo3",
"color": "red",
"size": 92,
"seq": 3,
"hasil": 0
}
];
array.sort(function (a, b) {
return a.hasil - b.hasil;
});
for (var i = 0; i < array.length; i++) {
array[i].seq = i+1;
}
console.log(array);
&#13;
答案 1 :(得分:1)
按hasil
对数组进行排序,然后遍历它以重新分配seq
:
var arr = [
{
"tipe": "foo1",
"color": "red",
"size": 92,
"seq": 1,
"hasil": 0
},
{
"tipe": "foo2",
"color": "red",
"size": 92,
"seq": 2,
"hasil": 1
},
{
"tipe": "foo3",
"color": "red",
"size": 92,
"seq": 3,
"hasil": 0
}
];
var seqs = arr.map(e => e.seq);
arr.sort((a, b) => a.hasil - b.hasil).forEach((e, i) => e.seq = seqs[i]);
console.log(arr);
答案 2 :(得分:1)
您可以创建hasil
值数组并对其进行排序,然后使用array#map
和object#assign
创建新数组。
var input = [{ "tipe": "foo1", "color": "red", "size": 92, "seq": 1, "hasil": 0 }, { "tipe": "foo2", "color": "red", "size": 92, "seq": 2, "hasil": 1 }, { "tipe": "foo3", "color": "red", "size": 92, "seq": 3, "hasil": 0 }],
sortedHasil = input.map(({hasil}) => hasil).sort(),
result = input.map((o, i) => Object.assign(o, {'hasil': sortedHasil[i]}));
console.log(result);
答案 3 :(得分:0)
尝试排序功能 如果你不想排序你可以用if else
来做var input =[
{
"tipe": "foo1",
"color": "red",
"size": 92,
"seq": 1,
"hasil": 0
},
{
"tipe": "foo3",
"color": "red",
"size": 92,
"seq": 2,
"hasil": 0
},
{
"tipe": "foo2",
"color": "red",
"size": 92,
"seq": 3,
"hasil": 1
}
]
input.sort(function (a,b){
return a.hasil - b.hasil
})
答案 4 :(得分:0)
你可以有一个排序,然后有一个map函数来处理这个,比如
var json = [
{
"tipe": "foo1",
"color": "red",
"size": 92,
"seq": 1,
"hasil": 0
},
{
"tipe": "foo2",
"color": "red",
"size": 92,
"seq": 2,
"hasil": 1
},
{
"tipe": "foo3",
"color": "red",
"size": 92,
"seq": 3,
"hasil": 0
}
]
var newArr = json.sort(function(a, b){
if(a.hasil === b.hasil)
return a.seq - b.seq;
return a.hasil - b.hasil
}).map(function(a, i) {
return {
...a,
seq: i+1
}
})
console.log(newArr)