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?
mplungjan
180k29 gold badges183 silver badges246 bronze badges
asked Sep 8, 2020 at 7:43
Swapnil Shende
3151 gold badge6 silver badges19 bronze badges
5 Answers 5
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)
answered Sep 8, 2020 at 8:01
Magiczne
1,6112 gold badges17 silver badges25 bronze badges
Sign up to request clarification or add additional context in comments.
Comments
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>
answered Sep 8, 2020 at 7:49
Barmar
789k57 gold badges555 silver badges669 bronze badges
Comments
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; }
answered Sep 8, 2020 at 7:50
Nina Scholz
388k26 gold badges367 silver badges417 bronze badges
Comments
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)
answered Sep 8, 2020 at 7:53
Luke Storry
6,7921 gold badge11 silver badges25 bronze badges
Comments
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);
answered Sep 8, 2020 at 7:53
alotropico
1,9943 gold badges17 silver badges25 bronze badges
Comments
lang-js