如何重新定位JSON结构键和值?

时间:2018-01-16 07:07:43

标签: javascript json

我有一个像这样的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
    }
]

有一种方法可以实现吗?

5 个答案:

答案 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;
&#13;
&#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#mapobject#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)