multidimensional array with key/value pair

vasilev

Registered
здравейте,
изписвам на анлгийски за да го намират и от други държави :)
имам следният масив:

Код:
[
{"name":"тест","age":12,"children":[1,2],"parent":[]},
{"name":"тест2","age":12,"children":[],"parent":[0]},
{"name":"тест3","age":12,"children":[],"parent":[0]}
]

всичко е ок, тъй като ключовете са 0,1,2 , въпросът е ако изтрия 0, то 1, 2 вече са други стойности и 0 - parent го няма.
затова искам да създам същият масив но с уникален ключ създаден по подобен начин:

Код:
var obj = new Array;
      obj['8374jd8u'] = new Array;
      obj['8374jd8u']['age'] = "12";
      obj['8374jd8u']['name'] = "demo demov";
      obj['test'] = new Array;
      obj['test']['age'] = "12";
      obj['test']['name'] = "demo demov";

така се създава :

Код:
[
{"key1":
{"name":"тест","age":12,"children":[1,2],"parent":[]}
},
{"key2":
{"name":"тест2","age":12,"children":[],"parent":[0]}
},
{"key3":
{"name":"тест3","age":12,"children":[],"parent":[0]}
}
]


не мога да го обходя вече..

Код:
this.tree.forEach(function(element, index) {
            if (element.parent.length == 0) { .....


въпросът ми е - така ли е правилно и ако не - как бих могъл да използвам key/value pair. по този начин ако изтрия някой ключ, то другите няма да заемат други стойности ..

мерси !
 
В случая масива с обектите трябва да изглежда по-скоро така:
Код:
let data = [
    {
    "key": 1, "name":"тест","age":12,"children":[1,2], "parent":[]
    },

    {
    "key": 2', "name":"тест2","age":12,"children":[],"parent":[0]
    },

    {
    "key": 3, "name":"тест3","age":12,"children":[],"parent":[0]
    }
]


После много лесно можеш да правиш всякакви операции с lodash ( https://lodash.com/docs/4.17.15 )


Код:
let key1 = _.find(data, function(o) { return o.key == 1; });

// parent length 0
let new_data = _.find(data, function(o) { return o.parent.length == 0; });
 
здравей,
да , но в такъв случай ако изтрия някой key, то другите трябва да ги ъпдейтна. а в данните са заложени именно тези ключове и малко са зависими..
може ли ключът да е уникален а не номер?
 
Е то мисля, че при всички случаи ако изтриеш нещо, другите трябва да ги ъпдейтнеш където има зависимости?
Код:
let data = [
    let data = {
    "key": 1, "name":"тест","age":12,"children":[1,2], "parent":[]
    },

    {
    "key": 2', "name":"тест2","age":12,"children":[],"parent":[1]
    },

    {
    "key": 3, "name":"тест3","age":12,"children":[],"parent":[1]
    }
]

Ако изтриеш реда с key 2 твоя масив ще изглежда ей така и трябва от този с key 1 да махнеш от children 2-ката, защото вече не съществува. Реално като триеш нещо стойноста на key, ще се запазва и след изтриването, за разлика от index-a.


Код:
let data = [
    {
    "key": 1, "name":"тест","age":12,"children":[1,2], "parent":[]
    },
    {
    "key": 3, "name":"тест3","age":12,"children":[],"parent":[0]
    }
]

Не ти разбирам напълно въпроса какво те затруднява в случая :)

https://jsfiddle.net/k4rund6x/11/
 
Асоциативен масив не съществува в JS.

Използвай си обект:

Код:
{
    key1: {"name":"тест","age":12,"children":[1,2],"parent":[]},
    key2: {"name":"тест2","age":12,"children":[],"parent":[0]},
    key3: {"name":"тест3","age":12,"children":[],"parent":[0]}
}

После обхождай с lodash. Лодаш може да обхожда и обекти.

Код:
let collection = {
    key1: {"name":"тест","age":12,"children":[1,2],"parent":[]},
    key2: {"name":"тест2","age":12,"children":[],"parent":[0]},
    key3: {"name":"тест3","age":12,"children":[],"parent":[0]}
};

_.each(collection, (value, key) => console.log(key, value));
 

Горе