【问题标题】:Search inside an array of objects under an object property for a string assistance in JavaScript在对象属性下的对象数组中搜索 JavaScript 中的字符串辅助
【发布时间】:2016-01-28 21:02:04
【问题描述】:

我正在使用一个 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 下的对象数组中的字符串值

任何帮助表示赞赏

【问题讨论】:

  • 试试这个:Javascript search inside a JSON object,应该可以帮到你
  • “选项”在哪里出现? this.options.items
  • @AdamJeffers 我认为var items实际上是this.options.items的内容。
  • items.map(i => i.name).includes(val) :-)

标签: javascript


【解决方案1】:

可能是这样的吗?

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/

【讨论】:

    【解决方案2】:

    尝试将您的对象数组映射回简单格式:

    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

    【讨论】:

    • jquery 对于它来说真的是矫枉过正。 Array.prototype.map 存在多年(并且 polifyll 可用)。 PS:您至少可以使用对 jquery 对象的一致引用——jQuery$ 在这两种情况下。
    • 在 ES2015 已成为既定标准的世界里,它肯定是后退了一步。将您的代码与items.map(i =&gt; i.name).includes(val) 进行比较
    • 太棒了:-) 未来半年了
    • 嗯,看起来 MDN 已将 includes 列为“实验性”并作为 ES2016 的一部分:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 但您的观点是正确的,我需要稍微调整一下我的想法。
    猜你喜欢
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    相关资源
    最近更新 更多