2017-08-25 125 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' –

相關問題