簡體   English   中英

Javascript:在數組中查找對象的索引,不知道索引,只有對象

[英]Javascript: Finding an object's index in an array, not knowing the index, only the object

我有一個對象數組,我想刪除其中一個對象。

[
  {"field":"ingredients","gte":"egg","lte":"egg"},
  {"field":"ingredients","gte":"bakepulver","lte":"bakepulver"},
  {"field":"ingredients","gte":"hvetemel","lte":"hvetemel"}
]

我不知道要刪除的對象的索引,但是我知道整個對象。 即:

{"field":"ingredients","gte":"bakepulver","lte":"bakepulver"}

我需要通過對象的全部內容(所有屬性)而不是通過fieldgtelte來查找對象的索引。 如何僅使用普通JavaScript在數組中找到對象的索引?

您可以遍歷數據,然后檢查鍵的長度以及每個鍵的內容是否相同。

 var data = [{ "field": "ingredients", "gte": "egg", "lte": "egg" }, { "field": "ingredients", "gte": "bakepulver", "lte": "bakepulver" }, { "field": "ingredients", "gte": "hvetemel", "lte": "hvetemel" }], search = { "field": "ingredients", "gte": "bakepulver", "lte": "bakepulver" }, keys = Object.keys(search), index = -1; data.some(function (a, i) { if (Object.keys(a).length === keys.length && keys.every(function (k) { return a[k] === search[k]; })) { index = i; return true; } }); console.log(index); 

ES6

 var data = [{ "field": "ingredients", "gte": "egg", "lte": "egg" }, { "field": "ingredients", "gte": "bakepulver", "lte": "bakepulver" }, { "field": "ingredients", "gte": "hvetemel", "lte": "hvetemel" }], search = { "field": "ingredients", "gte": "bakepulver", "lte": "bakepulver" }, keys = Object.keys(search), index = data.findIndex(a => Object.keys(a).length === keys.length && keys.every(k => a[k] === search[k])); console.log(index); 

您可以使用Object.keys()Array.prototype.findIndex()Array.prototype.every()來檢查每個屬性名稱,值和對象屬性名稱.length是否相等。

 let data = [ {"field":"ingredients","gte":"egg","lte":"egg"}, {"field":"ingredients","gte":"bakepulver","lte":"bakepulver"}, {"field":"ingredients","gte":"hvetemel","lte":"hvetemel"} ]; let props = {"field":"ingredients","gte":"bakepulver","lte":"bakepulver"}; let keys = Object.keys(props); let index = data.findIndex(o => keys.every(key => o[key] === props[key]) && Object.keys(o).length === keys.length); console.log(index); 

從您的進一步評論中可以理解,您僅需要針對此特定情況的解決方案,其中對象由3個給定的屬性組成。 因此,我建議使用此ES6解決方案:

 var data = [ { "field": "ingredients", "gte": "egg", "lte": "egg" }, { "field": "ingredients", "gte": "bakepulver", "lte": "bakepulver" }, { "field": "ingredients", "gte": "hvetemel", "lte": "hvetemel" }]; var search = { "field": "ingredients", "gte": "bakepulver", "lte": "bakepulver" }; var index = data.findIndex( a => a.field == search.field && a.gte == search.gte && a.lte == search.lte); console.log(index); 

如果您沒有完整的ES6支持,則:

 var data = [ { "field": "ingredients", "gte": "egg", "lte": "egg" }, { "field": "ingredients", "gte": "bakepulver", "lte": "bakepulver" }, { "field": "ingredients", "gte": "hvetemel", "lte": "hvetemel" }]; var search = { "field": "ingredients", "gte": "bakepulver", "lte": "bakepulver" }; var index = -1; data.some(function (a, i) { if (a.field == search.field && a.gte == search.gte && a.lte == search.lte) return index = i, true; }); console.log(index); 

您可以使用此代碼解決問題

var array = [
    {"field":"ingredients","gte":"egg","lte":"egg"},
    {"field":"ingredients","gte":"bakepulver","lte":"bakepulver"},
    {"field":"ingredients","gte":"hvetemel","lte":"hvetemel"}
];
var searchObject =      
    {"field":"ingredients","gte":"bakepulver","lte":"bakepulver"};

var indexOfSearchResult;

for (var i = 0; i < array.length; i++) {
    var checkEqualBool = true;
    for (var key in array[i]) {
        if(array[i][key]!=searchObject[key]){
            checkEqualBool = false;
            break;
        }
    }
    if(checkEqualBool){
        indexOfSearchResult = i;
        break;
    }
}

我使用比較對象的舊方法,將其字符串化 嘗試審查這一

 var x = [{ "field": "ingredients", "gte": "egg", "lte": "egg" }, { "field": "ingredients", "gte": "bakepulver", "lte": "bakepulver" }, { "field": "ingredients", "gte": "hvetemel", "lte": "hvetemel" }]; var control = { "field": "ingredients", "gte": "bakepulver", "lte": "bakepulver" }; function getIndex(arr, key) { var got = false, result = -1; arr.every(function(e, i) { if (JSON.stringify(e) === JSON.stringify(key)) { console.log('match found'); result = i; return false; } return true; }) return result; } console.log(getIndex(x, control)); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM