Page 1 of 1

multidimensional array with key/value pair

Posted: Fri Sep 04, 2020 8:07 am
by vasilev
здравейте,
изписвам на анлгийски за да го намират и от други държави :)
имам следният масив:

Code: Select all

[
{"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 го няма.
затова искам да създам същият масив но с уникален ключ създаден по подобен начин:

Code: Select all

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";
така се създава :

Code: Select all

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

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

Code: Select all

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

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

мерси !

Re: multidimensional array with key/value pair

Posted: Fri Sep 04, 2020 9:15 am
by deam0n
В случая масива с обектите трябва да изглежда по-скоро така:

Code: Select all

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 )

Code: Select all

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; });

Re: multidimensional array with key/value pair

Posted: Fri Sep 04, 2020 10:48 am
by vasilev
здравей,
да , но в такъв случай ако изтрия някой key, то другите трябва да ги ъпдейтна. а в данните са заложени именно тези ключове и малко са зависими..
може ли ключът да е уникален а не номер?

Re: multidimensional array with key/value pair

Posted: Fri Sep 04, 2020 3:43 pm
by deam0n
Е то мисля, че при всички случаи ако изтриеш нещо, другите трябва да ги ъпдейтнеш където има зависимости?

Code: Select all

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.

Code: Select all

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/

Re: multidimensional array with key/value pair

Posted: Fri Sep 04, 2020 4:53 pm
by Revelation
Асоциативен масив не съществува в JS.

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

Code: Select all

{
    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. Лодаш може да обхожда и обекти.

Code: Select all

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));

Re: multidimensional array with key/value pair

Posted: Fri Sep 04, 2020 8:16 pm
by vasilev
добре става..
супер ! благодаря :)


@deam0n ... сложно става да се ъпдейтва допълнително.