Как отсортировать вложенный массив JSON в javascript

#javascript #sorting

#javascript #сортировка

Вопрос:

Я хочу отсортировать вложенные ниже данные на основе ключа, у меня есть .sort функция использования, но я не работаю с вложенными данными, т.е.: sortFunction(data,'poolTimeRemain','desc') , Пожалуйста, помогите

Обновите данные JSON.

пусть data = [{ «rows»: [{ «poolTimeRemain»: «520 часов», «industry»: «Бизнес и профессиональные услуги», }, { «poolTimeRemain»: «503 часа», «industry»: «Бизнес и профессиональные услуги» } ], «кнопка»:{ «rowspan»: 2, «engIds»: «a2P3B000000BCOPUA4,a2P3B000000BCQ6UAO» } }, { «rows»: [{ «poolTimeRemain»: «420 часов», «industry»: «Бизнес и профессиональные услуги», }, { «poolTimeRemain»: «450 часов», «промышленность»: «Бизнес и профессиональные услуги» } ], «кнопка»: { «rowspan»: 2, «engIds»: «a2p3b000000bccopua4,a2P3B000000BCQ6UAO» } }, { «строки»: [{ «poolTimeRemain»: «600 часов», «отрасль»: «Бизнес и профессиональные услуги», } ], «button»: { «rowspan»: 2, «engIds»: «a2P3B000000BCOPUA4,a2P3B000000BCQ6UAO» } }]

Комментарии:

1. Отредактируйте свой вопрос, пожалуйста, это едва читаемо. Также добавьте сортировку до и после

Ответ №1:

Вам просто нужно получить доступ rows и использовать .sort его как обычно

   let data = [{
    "rows": [{
        "title": null,
        "role": null,
        "relationShip": "Reseller",
        "productFamily": "Google Workspace",
        "poolTimeRemain": "-520 hours",
        "industry": "Business amp; Professional Services",
        "engId": "a2P3B000000BCOPUA4",
        "country": null,
        "annualRevenue": null,
        "accountId": "0013B00000foEbOQAU"
    }, {
        "title": null,
        "role": null,
        "relationShip": "Reseller",
        "productFamily": "Google Workspace",
        "poolTimeRemain": "-503 hours",
        "industry": "Business amp; Professional Services",
        "engId": "a2P3B000000BCQ6UAO",
        "country": null,
        "annualRevenue": null,
        "accountId": "0013B00000foEbOQAU",
        "cssclass": "removeTopBorder"
    }],
    "button": {
        "rowspan": 2,
        "engIds": "a2P3B000000BCOPUA4,a2P3B000000BCQ6UAO"
    }
}]

function sortFunction(input, label, dir) {
  if (dir == "asc")
    return input[0]["rows"].sort((a,b) => (a[label] > b[label]) ? 1 : ((b[label] > a[label]) ? -1 : 0))
  else if (dir == "desc")
    return input[0]["rows"].sort((a,b) => (a[label] < b[label]) ? 1 : ((b[label] < a[label]) ? -1 : 0))
} 

console.log(sortFunction(data, "poolTimeRemain", "desc")) 

Комментарии:

1. Привет @doan, спасибо за ваш ответ, но это приведет к сортировке только подмассива, верно?, я хочу, чтобы первый подмассив сортировался и основывался на 0-м индексе в подмассиве, я хочу отсортировать родительский массив JSON

2. @sarveshkumar можете ли вы предоставить больше примеров / тестовых примеров в своем вопросе? Поскольку, исходя из того, что я видел, «строки» и «кнопка» имеют разную структуру, 1 — это массив, а 1 — json

3. Кроме того, 0-й индекс подмассива является json, вы не можете сравнивать 2 json, только на основе ключа или значения

4. я обновил пример массива json, поэтому ожидаемые данные будут: 600 часов, 520 часов, 503 часа, 450 часов, 420 часов