简体   繁体   中英

create Array inside object in javascript

I want to create an array of object shown in below code.

 myobj = [{ name: "abc", "code": "aa", "isdefault": 1 }, { name: "abc", "code": "bb", "isdefault": 0 }, { name: "bcd", "code": "ac", "isdefault": 0 }] var codeids = {}; $.each(myobj, function(key, val) { console.log(val); // ==>{name: "abc","code":4,"isdefault":1 } codeids[val.name] = { [val.code]: val.isdefault }; // I want codeids['abc'] should be ==> [{"aa":1},{"ab":0}...] }); console.log(codeids)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

final codeids should be ==>

{"abc":[{"aa":1},{"ab":0}],"bcd":[{"ac":0},{"cd":0}],...}*

how can I achieve this?

You can do it also using reduce method.

 let myobj = [{ name: "abc", "code": "aa", "isdefault": 1 }, { name: "abc", "code": "bb", "isdefault": 0 }, { name: "bcd", "code": "ac", "isdefault": 0 }] let y = myobj.reduce((acc, obj) => { if (!acc[obj.name]) { acc[obj.name] = [] } acc[obj.name].push({ [obj.code]: obj.isdefault }) return acc }, {}) console.log(y)

You need to push onto an array, not just assign directly to the property.

 myobj = [{ name: "abc", "code": "aa", "isdefault": 1 }, { name: "abc", "code": "bb", "isdefault": 0 }, { name: "bcd", "code": "ac", "isdefault": 0 }] var codeids = {}; $.each(myobj, function(key, val) { if (!codeids[val.name]) { // initialize empty array codeids[val.name] = []; } codeids[val.name].push({ [val.code]: val.isdefault }); }); console.log(codeids);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

You could take the values from the object and check if the property exists for the array.

This approach works without jquery .

 const array = [{ name: "abc", code: "aa", isdefault: 1 }, { name: "abc", code: "bb", isdefault: 0 }, { name: "bcd", code: "ac", isdefault:0 }], codeids = {}; array.forEach(({ name, code, isdefault }) => { if (!codeids[name]) codeids[name] = []; codeids[name].push({ [code]: isdefault }); }); console.log(codeids);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

You can do this with a plain JS forEach loop, no Jquery needed:

 myobj = [{ name: "abc", "code": "aa", "isdefault": 1 }, { name: "abc", "code": "bb", "isdefault": 0 }, { name: "bcd", "code": "ac", "isdefault": 0 }] var codeids = {}; myobj.forEach(({name, code, isdefault}) => { if (!codeids[name]) codeids[name] = []; codeids[name].push({[code]: isdefault}); }) console.log(codeids)

If I understood correctly this should do it:

 myobj = [ {name: "abc","code":"aa","isdefault":1 }, {name: "abc","code":"bb","isdefault":0 }, {name: "bcd","code":"ac","isdefault":0 } ]; var codeids = {}; myobj.forEach((val) => { if(!codeids.hasOwnProperty(val.name)) { codeids[val.name] = []; } const newItem = {}; newItem[val.code] = val.isdefault; codeids[val.name].push(newItem); }); console.log(codeids);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM