2017-08-25 126 views
1

的指标。如果我有一个数组这样:使用数组中对象的孩子的值来获得所述物体

var maskedlist = [ 
    {id:-1,name:'*****选'}, 
    {id:0,name:'*****(3天)'}, 
    {id:1,name:'*****'}, 
    {id:3,name:'*****'}, 
    {id:2,name:'*****列'}, 
    {id:4,name:'*****系列'}, 
    {id:5,name:'*****系列'}, 
    {id:6,name:'*****系列'}, 
    {id:7,name:'*****系列'}, 
    {id:8,name:'*****'}, 
    {id:9,name:'*****系列'}, 
    {id:10,name:'*****铺系列'}, 
    {id:12,name:'*****列'}, 
    {id:11,name:'*****系列'}, 
    {id:13,name:'*****系列'}, 
    {id:14,name:'*****'}, 
    {id:15,name:'*****列'}, 
    {id:100,name:'*****部测试号'}, 
    {id:200,name:'*****厅体验版'}, 
    {id:201,name:'*****'}, 
    {id:202,name:'*****单店系列'}, 
    {id:203,name:'*****多店系列'}, 
    {id:16,name:'*****系列'}, 
    {id:17,name:'*****系列'}, 
    {id:204,name:'*****代运营套餐'}, 
    {id:205,name:'*****活动运营'}, 
    {id:206,name:'*****内容运营'}, 
    {id:207,name:'*****商户运营'}, 
    {id:208,name:'*****外卖系列'} 
] 

我将有一个变量incoming_id将可能匹配一个obj的孩子id的值,假设它是205

所以在下面的新的OBJ:

var entity = { 
    selected: maskedlist[index] 
} 

现在我将如何能够得到incoming_idindex

很明显,我可以使用循环是这样的:

for (i = 0; i < maskedlist.length; i++) { 
    maskedlist[i].id == incoming_id && index = i 
} 

不会觉得很优雅寿,如果我有一个列表足够长那可真慢,可能会随时崩溃的浏览器时间。

回答

2

要查找数组中的索引,您可以使用Array.prototype.findIndex()

但根据你的问题最好是用使用Array.prototype.find()获取对象数组maskedlist与财产id等于205

示例代码找到indexentity

var maskedlist = [{id: -1,name: '*****选'},{id: 0,name: '*****(3天)'},{id: 1,name: '*****'},{id: 3,name: '*****'},{id: 2,name: '*****列'},{id: 4,name: '*****系列'},{id: 5,name: '*****系列'},{id: 6,name: '*****系列'},{id: 7,name: '*****系列'},{id: 8,name: '*****'},{id: 9,name: '*****系列'},{id: 10,name: '*****铺系列'},{id: 12,name: '*****列'},{id: 11,name: '*****系列'},{id: 13,name: '*****系列'},{id: 14,name: '*****'},{id: 15,name: '*****列'},{id: 100,name: '*****部测试号'},{id: 200,name: '*****厅体验版'},{id: 201,name: '*****'},{id: 202,name: '*****单店系列'},{id: 203,name: '*****多店系列'},{id: 16,name: '*****系列'},{id: 17,name: '*****系列'},{id: 204,name: '*****代运营套餐'},{id: 205,name: '*****活动运营'},{id: 206,name: '*****内容运营'},{id: 207,name: '*****商户运营'},{id: 208,name: '*****外卖系列'}], 
 
    index = maskedlist.findIndex(obj => obj.id === 205), 
 
    entity = { 
 
     selected: maskedlist.find(obj => obj.id === 205) 
 
    }; 
 

 
console.log('index:', index); 
 
console.log('entity:', entity);

0

你可以试试这个?

let index=''; 
    maskedlist.some(function(o){if(o["key1"] === "value2"){index = 
    maskedlist.indexOf(o["key1"]) }}) 

如果找到pair,则返回true,否则返回false。

这假设每个对象仅包含一个密钥/值对,并且该值是从来没有未定义

0

更好地利用Array.prototype.find()

var maskedlist = [ 
 
    {id:-1,name:'*****选'}, 
 
    {id:0,name:'*****(3天)'}, 
 
    {id:1,name:'*****'}, 
 
    {id:3,name:'*****'}, 
 
    {id:2,name:'*****列'}, 
 
    {id:4,name:'*****系列'}, 
 
    {id:5,name:'*****系列'}, 
 
    {id:6,name:'*****系列'}, 
 
    {id:7,name:'*****系列'}, 
 
    {id:8,name:'*****'}, 
 
    {id:9,name:'*****系列'}, 
 
    {id:10,name:'*****铺系列'}, 
 
    {id:12,name:'*****列'}, 
 
    {id:11,name:'*****系列'}, 
 
    {id:13,name:'*****系列'}, 
 
    {id:14,name:'*****'}, 
 
    {id:15,name:'*****列'}, 
 
    {id:100,name:'*****部测试号'}, 
 
    {id:200,name:'*****厅体验版'}, 
 
    {id:201,name:'*****'}, 
 
    {id:202,name:'*****单店系列'}, 
 
    {id:203,name:'*****多店系列'}, 
 
    {id:16,name:'*****系列'}, 
 
    {id:17,name:'*****系列'}, 
 
    {id:204,name:'*****代运营套餐'}, 
 
    {id:205,name:'*****活动运营'}, 
 
    {id:206,name:'*****内容运营'}, 
 
    {id:207,name:'*****商户运营'}, 
 
    {id:208,name:'*****外卖系列'} 
 
] 
 

 
var entity = {} 
 

 
entity.selected = maskedlist.find(item => item.id === 205) 
 

 
console.log(entity)

0

可以使用: 阵列.find(函数(currentValue,index,arr),thisValue)

所以,这将是这样的:

var entity = { 
    selected: maskedlist.find(function(obj) { 
     return obj.id === incoming_id ; 
    }) 
    }; 
+0

这并不是高性能,因为Array.prototype.filter()会去数组的末尾'maskedlist'即使已经发现了'obj.id' –

相关问题