@zeni1agent

Почему код срабатывает три раза а элементов добавляется девять?

Мой код
var lvl1 = {
'-': [], 
'+': [] 
} ;
var lvl2 = {
'~': lvl1, 
'=': lvl1, 
}
var lvl3 = {
'obj1':lvl2,  
'obj2':lvl2,  
'obj3':lvl2,  
}
var test1 = 'cor1[car1,-car2]cor2{<cop1,cop2,-cop3>}-cor3(cat3)cor4';

console.log(test1)

var text_default = test1.match(/(?<=^|\)|]|})[^\(|[|{]+/g);
var text_tag = test1.match(/(?<=\[).+?(?=\])/g);
var text_title = test1.match(/(?<=\{).+?(?=\})/g);
var text_author = test1.match(/(?<=\().+?(?=\))/g);


function add_plus_minus(way,arr){
	$.each(arr, function(index2, value2 ) {
		$.each(value2.split(','), function(index22, value22 ) {
			var first = value22.slice(0,1)
			var word = value22.replace(/[^A-Za-z0-9_]/g, "");
			if(first=='-'){
				lvl3[way[0]][way[1]]['-'].push(word);
				alert('v')
				console.log([way[0],way[1],'-']);
				console.log(word);
			}
			else{
				//lvl3[way[0]][way[1]]['+'].push(word);
				//console.log([way[0],way[1],'+']);
				//console.log(word);
			}
		});
	});
}


function add_or_and(way,arr){
	$.each(arr, function(index, value ) {
		var and_arr = value.match(/(?<=^|\>)[^\<]+/g);
		if(and_arr!=null){
			add_plus_minus([way,'='],and_arr);
		}
		var or_arr = value.match(/(?<=\<).+?(?=\>)/g);
		if(or_arr!=null){
			add_plus_minus([way,'~'],or_arr);
		}
	});
}

var default_name = 'obj1';
if(text_default!=null){
console.log(text_default);
add_or_and(default_name,text_default);
}
if(text_title!=null){
console.log(text_title);  
add_or_and('obj1',text_title);
}
if(text_author!=null){
console.log(text_author);  
add_or_and('obj2', text_author);
}
if(text_tag!=null){
console.log(text_tag); 
add_or_and('obj3',text_tag);
}
console.log(lvl3);

Код должен был добавить три элемента
cor3 в lvl3["obj1"]["="]["-"]
cop3 в lvl3["obj1"]["~"]["-"]
car2 в lvl3["obj3"]["="]["-"]
Но я не понимаю что пошло не так?
Код добавил все три элемента в каждый obj.
  • Вопрос задан
  • 81 просмотр
Решения вопроса 1
Bavashi
@Bavashi
Не удивительно: у вас все три свойства объекта lvl3 ссылаются на один и тот же объект lvl2. Другими словами, с такой записью lvl3[way[0]][way[1]] вы работает всегда с одним объектом, а вам нужно разделять.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы