Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 19.09.2015, 19:28
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

рони,
вы настоящий профессор Поклон вам до земли. Как же все-таки всё сложно
Ответить с цитированием
  #12 (permalink)  
Старый 19.09.2015, 19:47
Профессор
Отправить личное сообщение для caetus Посмотреть профиль Найти все сообщения от caetus
 
Регистрация: 23.09.2014
Сообщений: 197

var materials = {"Глина" : 10, "Цемент" : 5, "Вода" : 8, "Песок" : 14};
var sort_arr = ["Красители", "Песок", "Цемент", "Вода", "Примеси"];
	

function objSort (obj , arr) {
		var result = {};
	        arr.forEach(function(name) {  if(name in obj) result[name] = obj[name];});
		
		for(var i in obj) 	result[i] = obj[i];
		
		return result;
}



var materials = objSort(materials, sort_arr)

alert(JSON.stringify(materials))

Последний раз редактировалось caetus, 19.09.2015 в 20:06.
Ответить с цитированием
  #13 (permalink)  
Старый 19.09.2015, 20:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

caetus,

arr.forEach(function(name) {name in obj && (result[name] = obj[name])});
Ответить с цитированием
  #14 (permalink)  
Старый 19.09.2015, 20:14
Профессор
Отправить личное сообщение для caetus Посмотреть профиль Найти все сообщения от caetus
 
Регистрация: 23.09.2014
Сообщений: 197

теперь можно и удалять свойство с obj и красиво смотреться

name in obj && (result[name] = obj[name]) && delete obj[name];
Ответить с цитированием
  #15 (permalink)  
Старый 19.09.2015, 20:35
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от caetus
delete obj[name];
а надо ли менять исходный обьект без особой нужды?
Ответить с цитированием
  #16 (permalink)  
Старый 19.09.2015, 20:58
Профессор
Отправить личное сообщение для caetus Посмотреть профиль Найти все сообщения от caetus
 
Регистрация: 23.09.2014
Сообщений: 197

да тут понятно что без delete функция может сортировать объект и создавать новый отсортированный !

с delete функция делает меньше работы и тут стает вопрос когда эта производительность может пригодится !


отдаю предпочтения функции без delete
Ответить с цитированием
  #17 (permalink)  
Старый 20.09.2015, 06:03
Кандидат Javascript-наук
Отправить личное сообщение для sortarray Посмотреть профиль Найти все сообщения от sortarray
 
Регистрация: 19.09.2015
Сообщений: 117

Сообщение от фонарик Посмотреть сообщение
А не подскажете, почему если добавить в sort_arr имена которых нет в объекте materials, то команда log после сортировки materials считает что у объекта есть такие свойства со значением undefined?
из-за вот этой строки.
result[name]=object[name]

object[name], если его нет в object вычисляется в undefined

чтобы этого не было, можно сделать вот такой фикс
materials = {"Глина" : 10, "Цемент" : 5, "Вода" : 8, "Песок" : 14}
sort_arr =  ["Красители", "Песок", "Цемент", "Вода", "Примеси"]
   
sort = function(object, pattern){
  var result={}
  pattern.forEach(function(name){
    if(name in object) 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))
  
for (n in materials){
    console.log(n+" "+materials[n])
      
    }
Ответить с цитированием
  #18 (permalink)  
Старый 20.09.2015, 18:43
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Сообщение от sortarray Посмотреть сообщение
object[name], если его нет в object вычисляется в undefined
чтобы этого не было, можно сделать вот такой фикс
Аха, все теперь работает, спасибо вам еще раз
Ответить с цитированием
  #19 (permalink)  
Старый 26.11.2015, 19:04
Кандидат Javascript-наук
Отправить личное сообщение для Casufi Посмотреть профиль Найти все сообщения от Casufi
 
Регистрация: 05.02.2010
Сообщений: 109

А можно использовать функцию sort

http://jsfiddle.net/Casufi/6mytecbh/4/
Ответить с цитированием
  #20 (permalink)  
Старый 26.11.2015, 19:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от Casufi
А можно использовать функцию sort
ой а пост 10 смотрели?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перебрать значения свойств объекта. Александр222 Общие вопросы Javascript 2 25.04.2014 17:27
динамическое обновление свойств объекта в цикле grego Общие вопросы Javascript 3 04.12.2013 23:29
Выдать список всех свойств указанного при вводе объекта указанного фрейма flasher167 Общие вопросы Javascript 11 05.04.2013 08:14
получение значений свойств объекта bear9 Общие вопросы Javascript 3 01.12.2011 23:32
Не работает перебор свойств объекта BANick Общие вопросы Javascript 1 16.09.2008 22:46