2016-03-18 30 views
0

Javascript'te çalışma zamanında karmaşık nesneler oluşturmak mümkün mü? Eğer öyleyse, doğru sözdizimi nedir?Javascript'te dinamik olarak karmaşık nesneler oluşturma

var food = {}; 
food["fruit"]["yellow"] = "banana"; 
food["meat"]["red"] = "steak"; 
food."fruit"."green" = "apple"; 
+0

'vari food = {}; gıda ["meyve"] = {}; gıda ["meyve"] ["sarı"] = "muz"; gıda ["et"] = {}; gıda ["et"] ["kırmızı"] = "biftek"; gıda ["meyve"] ["yeşil"] = "elma"; –

+0

Sorunum bu dinamik bir şekilde gerçekleşmesi gerekiyor, eğer yiyecek alırsam ["et"] 2 kere yemek yiyemiyorum ["et"] = {} Çünkü önceki yiyecekler -> et girişi kaybedilecek – Agnaroc

+0

Yapmaya çalıştığınız şeyi daha ayrıntılı olarak açıklayabilir misiniz? Bana göre, bu soru çok belirsiz. –

cevap

2

Yapmaya çalıştığınız net değil. Eğer tek seferde yukarı o nesneyi oluşturmak istiyorsanız, o zaman böyle bir şey yapabileceğini:

var food = { 
    fruit: { 
     yellow: 'banana', 
     green: 'apple' 
    }, 
    meat: { 
     red: 'steak' 
    } 
}; 

o zaman sadece olduğundan emin olmak gerekir, bir anda birlikte bir iç içe nesne onu parça parça gerekiyorsa özellikler eklemek için yeni bir nesne oluşturmak.

Örneğin

, satır: food.fruit var olmadığından

food["fruit"]["yellow"] = "banana"; 

muhtemelen başarısız olacaktır.

Sen yapmalıdır:

var food = {}; 
food.fruit = {}; 
food.fruit.yellow = 'banana'; 
+0

Bir dosyadaki verilerde yineliyorum. Yiyeceklerin hiç bitmeyeceğini bilmiyorum. Yani, eğer etrafta herhangi bir yol yoksa, her zaman kullanırım (data.fruit == undefined) {var fruit = {}; } // data.fruit ile bir şeyler yapın – Agnaroc

1

Sen nesnesine veri eklemek için bir fonksiyon yazabiliriz. , ör.

function addEntry(obj, entry) { 
    if(entry.length < 2) return; 
    if(entry.length === 2) obj[entry[0]] = entry[1]; 
    else { 
    if(!obj[entry[0]] || typeof obj[entry[0]] !== "object") obj[entry[0]] = {}; 
    addEntry(obj[entry[0]], entry.slice(1)); 
    } 
} 

var data = [ 
    ["fruit", "yellow", "banana"], 
    ["meat", "red", "steak"], 
    ["fruit", "green", "apple"] 
]; 

var obj = {}; 
for(var i = 0; i < data.length; i++) { 
    addEntry(obj, data[i]); 
} 

console.log(obj);