-3

I am getting this Json Array i have to sort this array like the array i have mentioned please help me to in to get that array using the javascript sort function.

[{"key":"-Lp64sK3aNJ_K-jvGneA","value":"India"},
{"key":"-Lp64uAVsWCNFkRgPYnK","value":"China"},
{"key":"-LpjaFeusQm-9gkisTe4","value":"Switzerland"},
{"key":"-Lpjaj6nOSseZTF29ucJ","value":"Japan"},
{"key":"-LpjbqOF1tL1EFpiR4G0","value":"Iran"},
{"key":"-Lp6SJO-lp9mxt2IPSS9","value":"India,Andhra Pradesh"},
{"key":"-Lpv7SOKdlEkYlvIi36I","value":"India,Uttar Pradesh"},
{"key":"-Lp66I5deHmTf6WaU6WF","value":"China,Anhui"},
{"key":"-Lp66dTu7gwLBTjaqSkJ","value":"China,Fujian"},
{"key":"-LpvTcrZmubSqFuBvSMm","value":"India,Andhra Pradesh,Kanpur"},
{"key":"-Lpv7YKViplh9kBVKb-O","value":"India,Uttar Pradesh,Ghaziaabad"},{"key":"-LpvKlcP1EuJsSHEx9yH","value":"India,Uttar Pradesh,Agra"},
{"key":"-LpvTjo5OR8jUniZPuHh","value":"India,Uttar Pradesh,Kanpur"},
{"key":"-LpvUeEVFQu4raqmR1O3","value":"India,Uttar Pradesh,Gonda"},
{"key":"-LpvV7-2QouzF-Eil0_r","value":"India,Uttar Pradesh,Lucknow"},
{"key":"-LpwkUtmojicCEtUtEg4","value":"India,Uttar Pradesh,Bareily"},
{"key":"-LpwkUtshSmYbY_RV2F6","value":"India,Uttar Pradesh,Banaras"},
{"key":"-Lp68tYZvlwNWl8F6WSa","value":"China,Anhui,Anquing"},
{"key":"-Lp6TaKmOOyaIhk01J8_","value":"China,Anhui,Beijing"},
{"key":"-Lp6TlAJXHWkEqwdzwl5","value":"China,Anhui,Bengbu"},
{"key":"-Lq_xAkDuu7q5nS7YyCo","value":"China,Anhui,Chonnquing"},
{"key":"-Lp6z8Dut9vwRZuxoVr_","value":"China,Fujian,Fuzhou"}]

I want Above array to be sorted as below array with sort function of javascript

=======================================================================

[{"key":"-Lp64uAVsWCNFkRgPYnK","value":"China"},
{"key":"-Lp66I5deHmTf6WaU6WF","value":"Anhui,China"},
{"key":"-Lp68tYZvlwNWl8F6WSa","value":"Anquing,Anhui,China"},
{"key":"-Lp6TaKmOOyaIhk01J8_","value":"Beijing,Anhui,China"},
{"key":"-Lp6TlAJXHWkEqwdzwl5","value":"Bengbu,Anhui,China"},
{"key":"-Lq_xAkDuu7q5nS7YyCo","value":"Chonnquing,Anhui,China"},
{"key":"-Lp66dTu7gwLBTjaqSkJ","value":"Fujian,China"},
{"key":"-Lp6z8Dut9vwRZuxoVr_","value":"Fuzhou,Fujian,China"},
{"key":"-Lp64sK3aNJ_K-jvGneA","value":"India"},
{"key":"-Lp6SJO-lp9mxt2IPSS9","value":"Andhra Pradesh,India"},
{"key":"-LpvTcrZmubSqFuBvSMm","value":"Kanpur,Andhra Pradesh,India"},{
"key":"-Lpv7SOKdlEkYlvIi36I","value":"Uttar Pradesh,India"},
{"key":"-LpvKlcP1EuJsSHEx9yH","value":"Agra,Uttar Pradesh,India"},
{"key":"-LpwkUtshSmYbY_RV2F6","value":"Banaras,Uttar Pradesh,India"},
{"key":"-LpwkUtmojicCEtUtEg4","value":"Bareily,Uttar Pradesh,India"},
{"key":"-Lpv7YKViplh9kBVKb-O","value":"Ghaziaabad,Uttar Pradesh,India"},
{"key":"-LpvUeEVFQu4raqmR1O3","value":"Gonda,Uttar Pradesh,India"},
{"key":"-LpvTjo5OR8jUniZPuHh","value":"Kanpur,Uttar Pradesh,India"},
{"key":"-LpvV7-2QouzF-Eil0_r","value":"Lucknow,Uttar Pradesh,India"},
{"key":"-LpjbqOF1tL1EFpiR4G0","value":"Iran"},
{"key":"-Lpjaj6nOSseZTF29ucJ","value":"Japan"},
{"key":"-LpjaFeusQm-9gkisTe4","value":"Switzerland"}]
  • 3
    How exactly are you sorting? What is the ordering logic you want to apply? – ZorgoZ Oct 19 '19 at 19:40
  • 2
    Possible duplicate of [Sort array of objects by string property value](https://stackoverflow.com/questions/1129216/sort-array-of-objects-by-string-property-value) – ZorgoZ Oct 19 '19 at 19:41
  • looks like there is some transformation on the `value` field – Anthony Oct 19 '19 at 19:43
  • What is the Javascript sort function? and how is it implemented? Please show us where you have written your JS sorting function that calls this json array. We will need the sorting function and not the function input. – Juniar Oct 20 '19 at 02:59

2 Answers2

0

You could split the value, reverse it and join it for a string, then map a new object.

var array = [{ key: "-Lp64uAVsWCNFkRgPYnK", value: "China" }, { key: "-Lp66I5deHmTf6WaU6WF", value: "China, Anhui" }, { key: "-Lp68tYZvlwNWl8F6WSa", value: "China, Anhui, Anquing" }, { key: "-Lp6TaKmOOyaIhk01J8_", value: "China, Anhui, Beijing" }, { key: "-Lp6TlAJXHWkEqwdzwl5", value: "China, Anhui, Bengbu" }, { key: "-Lq_xAkDuu7q5nS7YyCo", value: "China, Anhui, Chonnquing" }, { key: "-Lp66dTu7gwLBTjaqSkJ", value: "China, Fujian" }, { key: "-Lp6z8Dut9vwRZuxoVr_", value: "China, Fujian, Fuzhou" }, { key: "-Lp64sK3aNJ_K-jvGneA", value: "India" }, { key: "-Lp6SJO-lp9mxt2IPSS9", value: "India, Andhra Pradesh" }],
    result = array.map(o => ({ ...o, value: o.value.split(/, \s*/).reverse().join(', ') }));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
0

You can create your country order mapper and sort using the same.

Then iterate over to reverse the order of country state city.

let arr = [
  { key: "-Lp64sK3aNJ_K-jvGneA", value: "India" },
  { key: "-Lp64uAVsWCNFkRgPYnK", value: "China" },
  { key: "-LpjaFeusQm-9gkisTe4", value: "Switzerland" },
  { key: "-Lpjaj6nOSseZTF29ucJ", value: "Japan" },
  { key: "-LpjbqOF1tL1EFpiR4G0", value: "Iran" },
  { key: "-Lp6SJO-lp9mxt2IPSS9", value: "India,Andhra Pradesh" },
  { key: "-Lpv7SOKdlEkYlvIi36I", value: "India,Uttar Pradesh" },
  { key: "-Lp66I5deHmTf6WaU6WF", value: "China,Anhui" },
  { key: "-Lp66dTu7gwLBTjaqSkJ", value: "China,Fujian" },
  { key: "-LpvTcrZmubSqFuBvSMm", value: "India,Andhra Pradesh,Kanpur" },
  { key: "-Lpv7YKViplh9kBVKb-O", value: "India,Uttar Pradesh,Ghaziaabad" },
  { key: "-LpvKlcP1EuJsSHEx9yH", value: "India,Uttar Pradesh,Agra" },
  { key: "-LpvTjo5OR8jUniZPuHh", value: "India,Uttar Pradesh,Kanpur" },
  { key: "-LpvUeEVFQu4raqmR1O3", value: "India,Uttar Pradesh,Gonda" },
  { key: "-LpvV7-2QouzF-Eil0_r", value: "India,Uttar Pradesh,Lucknow" },
  { key: "-LpwkUtmojicCEtUtEg4", value: "India,Uttar Pradesh,Bareily" },
  { key: "-LpwkUtshSmYbY_RV2F6", value: "India,Uttar Pradesh,Banaras" },
  { key: "-Lp68tYZvlwNWl8F6WSa", value: "China,Anhui,Anquing" },
  { key: "-Lp6TaKmOOyaIhk01J8_", value: "China,Anhui,Beijing" },
  { key: "-Lp6TlAJXHWkEqwdzwl5", value: "China,Anhui,Bengbu" },
  { key: "-Lq_xAkDuu7q5nS7YyCo", value: "China,Anhui,Chonnquing" },
  { key: "-Lp6z8Dut9vwRZuxoVr_", value: "China,Fujian,Fuzhou" }
];

let sortMap = { China: 0, India: 1, Iran: 2, Japan: 3, Switzerland: 4 };
arr.sort(
  (a, b) => sortMap[a.value.split(",")[0]] - sortMap[b.value.split(",")[0]]
).forEach(e => e.value = e.value.split(',').reverse().join());
console.log(arr)
AZ_
  • 3,094
  • 1
  • 9
  • 19