2017-09-25 33 views
-1

是否有可能找到作爲項目數組一部分的對象文字中的成員字段,而無需循環遍歷整個數組?例如:查找對象文字數組中的成員

let items = [ 
    { 
     id: "abc", 
     name: "john" 
    }, 
    { 
     id: "def", 
     name: "steve" 
    }, 
    { 
     id: "ghi" 
     name: "bob" 
    } 
] 

如果我想引用其中名稱等於steve數組元素,有沒有辦法得到它,但沒有通過所有的項目迭代和檢查名成員?

+0

沒有,沒有,除非你知道確切的路徑,如'項目[1] .name'。沒有辦法搜索'史蒂夫'沒有迭代,至少部分是 – adeneo

+0

是的。我想要一個簡單的方法,只要名稱返回索引,其名稱就是「steve」。假設所有名稱都是唯一的。 – AndroidDev

+0

什麼是「memer」? – 2017-09-25 08:33:32

回答

4

如果沒有顯式循環,可以使用Array#find函數從數組中獲取對象。但無論如何,你需要比較一些條件才能得到所需的。如果您不知道該項目的索引,則需要遍歷該數組。您可以使用內置方法而不是顯式循環。

let items = [ 
 
    { 
 
     id: "abc", 
 
     name: "john" 
 
    }, 
 
    { 
 
     id: "def", 
 
     name: "steve" 
 
    }, 
 
    { 
 
     id: "ghi", 
 
     name: "bob" 
 
    } 
 
]; 
 

 
const obj = items.find(item => item.name === 'steve'); 
 
console.log(obj);

0

肯定。我想類似的東西只給定名稱的簡單方法返回指數

Array.findIndex這樣做,但它仍然遍歷

let items = [ 
 
    { 
 
     id: "abc", 
 
     name: "john" 
 
    }, 
 
    { 
 
     id: "def", 
 
     name: "steve" 
 
    }, 
 
    { 
 
     id: "ghi", 
 
     name: "bob" 
 
    } 
 
] 
 

 
var index = items.findIndex(item => item.name === 'steve'); 
 

 
console.log(index)

0

如果您經常需要通過得到的對象從數組名稱中,您可以創建名稱 - >對象(一次迭代)的映射,然後使用映射獲取對象:

const items = [ 
 
    { 
 
     id: "abc", 
 
     name: "john" 
 
    }, 
 
    { 
 
     id: "def", 
 
     name: "steve" 
 
    }, 
 
    { 
 
     id: "ghi", 
 
     name: "bob" 
 
    } 
 
]; 
 

 
const itemsMap = items.reduce((m, o) => m.set(o.name, o), new Map()); 
 

 
console.log(itemsMap.get('steve')); 
 

 
console.log(itemsMap.get('bob'));