Сортировка свойств объекта по параметру
Доброго времени суток. Помогите пожалуйста отсортировать свойства объекта materials исходя из номера индекса имени этого свойства в массиве sort_arr. Нужно чтобы получилось
"Песок": 14, "Цемент" : 5, "Вода" : 8, "Глина" : 10 var materials = {"Глина" : 10, "Цемент" : 5, "Вода" : 8, "Песок" : 14} var sort_arr = ["Песок", "Цемент", "Вода"] alert(JSON.stringify(materials )) |
зачем оно тебе ???
var materials = {"Глина" : 10, "Цемент" : 5, "Вода" : 8, "Песок" : 14} var sort_arr = ["Песок", "Цемент", "Вода", "Глина"] function f (obj, arr) { var index; for(var i = 0; i < arr.length; i++) { index = obj[arr[i]]; delete obj[arr[i]]; obj[arr[i]] = index; } } f(materials, sort_arr) console.log(materials) |
materials = {"Глина" : 10, "Цемент" : 5, "Вода" : 8, "Песок" : 14} sort_arr = ["Песок", "Цемент", "Вода"] sort = function(object, pattern){ var result={} pattern.forEach(function(name){ result[name]=object[name] }) Object.keys(object).forEach(function(name){if(pattern.indexOf(name) === -1) result[name] = object[name]}) return result } alert(JSON.stringify(sort(materials, sort_arr))) //>>>> {"Песок":14,"Цемент":5,"Вода":8,"Глина":10} |
Ребята, спасибо вам большое за помощь, у самого все равно так и не получилось.
Цитата:
|
Цитата:
|
фонарик,
потому что это не деструктивная операция, она не меняет исходный объект. materials = {"Глина" : 10, "Цемент" : 5, "Вода" : 8, "Песок" : 14} sort_arr = ["Песок", "Цемент", "Вода"] sort = function(object, pattern){ var result={} pattern.forEach(function(name){ result[name]=object[name] }) Object.keys(object).forEach(function(name){if(pattern.indexOf(name) === -1) result[name] = object[name]}) return result } materials=sort(materials, sort_arr) alert(JSON.stringify(materials)) //>>>> {"Песок":14,"Цемент":5,"Вода":8,"Глина":10} Ведь в твоем исходном сообщении ты говорил, что надо отсортировать, об изменении исходного объекта речи не было:) |
sortarray,
я думал сортировка вдогонку объект перестроит, а оказалось фигушки )) Спасибо вам еще раз. |
Цитата:
|
фонарик,
Прости, мне некогда сейчас, отвечу на днях:) |
фонарик,
materials = {"Глина" : 10, "Цемент" : 5, "Вода" : 8, "Песок" : 14} sort_arr = ["Красители", "Песок", "Цемент", "Вода", "Примеси"] sort = function(object, pattern){ var result={}; Object.keys(object).sort(function(a,b){ var aa = pattern.indexOf(a), bb = pattern.indexOf(b); if ( aa != -1 && bb != -1) return aa - bb ; if ( aa == -1 && bb == -1) return a < b ? 1 : a > b ? -1 : 0; if ( aa == -1 && bb != -1) return 1; if ( aa != -1 && bb == -1) return -1; }).forEach(function(name){ result[name]=object[name] }) return result } materials=sort(materials, sort_arr) alert(JSON.stringify(materials)) for (n in materials){ console.log(n+" "+materials[n]) } //>>>> {"Песок":14,"Цемент":5,"Вода":8,"Глина":10} |
Часовой пояс GMT +3, время: 02:27. |