[英]How to Retrieve a sub-object from an object where the ID of the sub-object is known
I have an object called Suppliers where the id is always unique as follows: 我有一个名为Suppliers的对象,其ID始终是唯一的,如下所示:
var suppliers = {
Supplier1: {
id: 1,
name: 'Supplier1',
SVGTemplate: 'svg-supplier1'
},
Supplier2: {
id: 2,
name: 'Supplier2',
SVGTemplate: 'svg-supplier2'
},
Supplier3: {
id: 3,
name: 'Supplier3',
SVGTemplate: 'svg-supplier3'
}
}
How can I return the sub-object (eg return suppliers.Supplier1) when all I know is the id of the sub object? 当我所知道的只是子对象的ID时,如何返回子对象(例如,return Suppliers.Supplier1)? I tried to use .filter, but that only seems to work on arrays:
我尝试使用.filter,但是这似乎只适用于数组:
function findById(source, id) {
return source.filter(function (obj) {
return +obj.id === +id;
})[0];
}
var supplierarray = findById(suppliers, myKnownID);
return supplierarray;
You need to loop over the object
using for-in
loop, you tried to use .filter
which is for array. 您需要使用
for-in
循环遍历object
,您尝试使用用于数组的.filter
。
So you can change findById
definition to below 因此,您可以将
findById
定义更改为以下内容
var suppliers = {
Supplier1: {
id: 1,
name: 'Supplier1',
SVGTemplate: 'svg-supplier1'
},
Supplier2: {
id: 2,
name: 'Supplier2',
SVGTemplate: 'svg-supplier2'
},
Supplier3: {
id: 3,
name: 'Supplier3',
SVGTemplate: 'svg-supplier3'
}
}
// Should return single object not array, as id is unique as OP said
function findById(source, id) {
for(var key in source){
if(source[key].id === id){
return source[key];
}
}
return null;
}
findById(suppliers,3);// {id: 3, name: "Supplier3", SVGTemplate: "svg-supplier3"}
Object.keys(suppliers).map(key => suppliers[key]).find(({id}) => id === someId);
You can search for any key in its child objects. 您可以在其子对象中搜索任何键。
Object.prototype.findBy = function(propName, propVal){
for( var i in this ){
if( this[i][ propName ] == propVal ){
return this[i];
}
}
return undefined;
};
var suppliers = {
Supplier1: {
id: 1,
name: 'Supplier1',
SVGTemplate: 'svg-supplier1'
},
Supplier2: {
id: 2,
name: 'Supplier2',
SVGTemplate: 'svg-supplier2'
},
Supplier3: {
id: 3,
name: 'Supplier3',
SVGTemplate: 'svg-supplier3'
}
}
console.log(suppliers.findBy("id",1));
Here i've added function inside prototype of root Object. 在这里,我在根对象的原型内添加了功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.