2015-10-28 141 views
0

我使用的是有一些代碼,希望像這樣的項目的一個簡單的平面陣列中的JavaScript庫的字符串援助裏面......搜索對象的對象屬性下的數組,在JavaScript

var items = [ 
    'item 1', 
    'item 2', 
    'item 3', 
]; 

這太有限了我的項目需要,所以我編輯庫接受對象,而不是像這樣的數組...

var items = [ 
    { 
     id: 1, 
     name: 'Item 1', 
     image: 'img 1', 
    }, 
    { 
     id: 2, 
     name: 'Item 2', 
     image: 'img 2', 
    }, 
    { 
     id: 3, 
     name: 'Item 3', 
     image: 'img 3', 
    }, 
]; 

庫調用像這樣的代碼...

if (_helpers.inArray(val, this.options.items) || (val === '')) { 
    return val; 
} 

它檢查字符串是否在items數組中。

因爲我的items數組不再是簡單的字符串值,而是現在的對象。這打破了這部分庫代碼。

它調用該函數的代碼是這樣的......

var _helpers = { 

    inArray: function(val, arr) { 
     return ($.inArray(val, arr) !== -1); 
    }, 

}; 

所以我需要讓我自己_helpers.inArray(val, this.options.items)功能有所幫助,這將在對象的數組檢查字符串值的對象屬性下name

任何幫助表示讚賞

+0

嘗試使用此:[使用Javascript搜索JSON對象內](HTTP ://stackoverflow.com/a/10679626/4677505),它應該可以幫助你 – Ziki

+0

'選項'進入這個位置? 'this.options.items' – AdamJeffers

+0

@AdamJeffers我認爲'var items'實際上是'this.options.items'的內容。 – Barmar

回答

2

可能是這樣呢?

var _helpers = { 
    inArray: function(val, arr) { 
     for (var i = 0; i < arr.length; i++){ 
      if (arr[i].name === val) 
       return true; 
     } 
     return false; 
    }, 
}; 

https://jsfiddle.net/z54qnukd/1/

1

嘗試映射你的對象的陣列回簡單格式:

var _helpers = { 

    inArray: function(val, arr) { 
     var mappedArr = $.map(items, function(item, index) { 
      return item.name; 
     }); 
     return ($.inArray(val, mappedArr) !== -1); 
    }, 

}; 

https://jsbin.com/tihuyuquni/edit?html,output

+0

jquery真的是過度殺傷它。 'Array.prototype.map'已有好幾年了(並且polifyll可用)。 PS:你至少可以使用對jquery對象的一致引用 - 無論是'jQuery'還是'$'。 – zerkms

+0

@zerkms'jQuery' vs'$'很好的捕獲 - 如果OP已經在使用庫,那麼在這裏使用它看起來似乎不太合適。 – pherris

+0

在ES2015是一個既定標準的世界裏,它肯定會退步。比較你的代碼與'items.map(i => i.name).includes(val)' – zerkms