У меня есть JSON, который я успешно могу отсортировать по числовым значениям.

data["example"].sort(function (a, b) {
return a["one"] - b["two"];
});

// Output:
0: {location: "0"}
1: {location: "0"}
2: {location: "0"}
3: {location: "0"}
4: {location: "0"}
5: {location: "0"}
6: {location: "0"}
7: {location: "0"}
8: {location: "1"}
9: {location: "2"}
10: {location: "3"}
11: {location: "4"}
12: {location: "5"}
13: {location: "6"}
14: {location: "7"}

Однако я хочу отсортировать его, начиная с 1 до , а после этого добавить все 0.

Нравится:

0: {location: "1"}
1: {location: "2"}
2: {location: "3"}
3: {location: "4"}
4: {location: "5"}
5: {location: "6"}
6: {location: "7"}
7: {location: "0"}
8: {location: "0"}
9: {location: "0"}
10: {location: "0"}
11: {location: "0"}
12: {location: "0"}
13: {location: "0"}
14: {location: "0"}

Я уверен, что есть простое решение, но я не могу найти ничего об этой конкретной числовой сортировке.

-1
ra.design 23 Окт 2018 в 17:03

2 ответа

Лучший ответ

Вы можете проверить, равно ли location 0, если это так, используйте Infinity, чтобы отсортировать и убедиться, что все местоположения будут помещены в конец массива.

let arr = [{"location":"0"},{"location":"0"},{"location":"0"},{"location":"0"},{"location":"0"},{"location":"0"},{"location":"0"},{"location":"0"},{"location":"1"},{"location":"2"},{"location":"3"},{"location":"4"},{"location":"5"},{"location":"6"},{"location":"7"}];

arr.sort(function(a, b) {
  return (a.location === "0" ? Infinity : a.location) - (b.location === "0" ? Infinity : b.location);
});

console.log(arr);

// Output:
// [{"location":"1"},{"location":"2"},{"location":"3"},{"location":"4"},{"location":"5"},{"location":"6"},{"location":"7"},{"location":"0"},{"location":"0"},{"location":"0"},{"location":"0"},{"location":"0"},{"location":"0"},{"location":"0"},{"location":"0"}];
2
ra.design 24 Окт 2018 в 06:27

После получения вывода запустить для

 for (let i = 0; i < array.length; i++) {
             array[i].location = i+1;

  }

Или используйте карту как

let counter = 1;
data["example"].sort(function (a, b) {
return a["one"] - b["two"];
}).map(c=> {c.location = counter++;return c});
0
hossein sedighian 23 Окт 2018 в 14:07
52951051