Javascript 如果数组中存在值,如何获取数组。滑动分页

Javascript 如果数组中存在值,如何获取数组。滑动分页,javascript,jquery,Javascript,Jquery,如果spConfig['attributes'][125]['options']中存在“id”:“236”,则获取中包含的数组 在jQuery中如何实现这一点 var spConfig = { "attributes": { "125": { "id": "125", "code": "pos_colours", "label": "Colour", "options": [{

如果
spConfig['attributes'][125]['options']
中存在
“id”:“236”
,则获取中包含的数组

在jQuery中如何实现这一点

var spConfig = {
    "attributes": {
        "125": {
            "id": "125",
            "code": "pos_colours",
            "label": "Colour",
            "options": [{
                "id": "236",
                "label": "Dazzling Blue",
                "price": "0",
                "oldPrice": "0",
                "products": ["11148"]
            }, {
                "id": "305",
                "label": "Vintage Brown",
                "price": "0",
                "oldPrice": "0",
                "products": ["11786", "11787", "11788", "11789", "11790", "11791", "11792", "11793"]
            }]
        }

    }

函数findMe(搜索词,位置){
对于(变量i=0;i

函数findMe(搜索词,位置){
对于(变量i=0;i
您的数据结构有点复杂,但假设
options.id
是唯一的,您可以使用

function foo(arg) {
    var filtered;
    $.each(spConfig.attributes, function() {
        filtered = $(this.options).filter(function() {
            return this.id == arg;
        });
    });
    return (filtered.length) ? filtered[0].products : [];
}

传递不存在的键时返回空数组的函数

此外,如果您有多个
属性
属性(而不是
125
),并且希望在它们上面迭代:

function foo(arg) {
    var filtered=[];
    $.each(spConfig.attributes, function() {
        filtered.push($(this.options).filter(function() {
            return this.id == arg;
        }));
    });
    filtered = $(filtered).filter(function() {
        return this.length;
    });
    return (filtered.length) ? filtered[0][0].products : [];
}

或者,如果您总是访问属性
属性[125]
,为了简单起见,您也可以将其保留为硬编码:

function foo(arg) {
    var filtered = $(spConfig.attributes[125].options).filter(function() {
        return this.id == arg;
    });
    return (filtered.length) ? filtered[0].products : [];
}

或者,如果需要更多自定义,则传递
属性
属性名

function foo(arg, attr) {
    var filtered = $(spConfig.attributes[attr].options).filter(function() {
        return this.id == arg;
    });
    return (filtered.length) ? filtered[0].products : [];
}

您的数据结构有点复杂,但假设
options.id
是唯一的,您可以使用

function foo(arg) {
    var filtered;
    $.each(spConfig.attributes, function() {
        filtered = $(this.options).filter(function() {
            return this.id == arg;
        });
    });
    return (filtered.length) ? filtered[0].products : [];
}

传递不存在的键时返回空数组的函数

此外,如果您有多个
属性
属性(而不是
125
),并且希望在它们上面迭代:

function foo(arg) {
    var filtered=[];
    $.each(spConfig.attributes, function() {
        filtered.push($(this.options).filter(function() {
            return this.id == arg;
        }));
    });
    filtered = $(filtered).filter(function() {
        return this.length;
    });
    return (filtered.length) ? filtered[0][0].products : [];
}

或者,如果您总是访问属性
属性[125]
,为了简单起见,您也可以将其保留为硬编码:

function foo(arg) {
    var filtered = $(spConfig.attributes[125].options).filter(function() {
        return this.id == arg;
    });
    return (filtered.length) ? filtered[0].products : [];
}

或者,如果需要更多自定义,则传递
属性
属性名

function foo(arg, attr) {
    var filtered = $(spConfig.attributes[attr].options).filter(function() {
        return this.id == arg;
    });
    return (filtered.length) ? filtered[0].products : [];
}

您好,谢谢您的回复,但是您输入的代码只返回myArray中是否找到您的妈妈,它不会告诉我您妈妈所在的数组的密钥是什么。。。任何想法此函数对该任务都没有帮助。您好,谢谢您的回复。但是,您输入的代码仅返回是否在myArray中找到您的妈妈,它不会告诉我包含您妈妈所在数组的密钥。。。此函数的任何IDEA对该任务都没有帮助。位置是数组,而不是对象。使用适当的循环。@bergi数组是一个对象,其内容是可枚举的。当然,您可以选择原型扩展,但在这种情况下这并不重要,因为
['id']==searchTerm
如果为空则会失败,而且原型也不应该如此混乱。这不比普通for循环快吗?不,它不快。是的,原型可以具有可枚举属性,例如,当对IE进行多填充es5方法或
indexOf
时。是的,您可以枚举原型属性,但是添加
['id']
引用将返回未定义的属性,这将导致等式检查失败并继续。我所说的混乱是指没有足够的额外属性来影响性能。如果它没有更快,尽管我认为它没有什么区别(更新为常规)。位置是一个数组,而不是一个对象。使用适当的循环。@bergi数组是一个对象,其内容是可枚举的。当然,您可以选择原型扩展,但在这种情况下这并不重要,因为
['id']==searchTerm
如果为空则会失败,而且原型也不应该如此混乱。这不比普通for循环快吗?不,它不快。是的,原型可以具有可枚举属性,例如,当对IE进行多填充es5方法或
indexOf
时。是的,您可以枚举原型属性,但是添加
['id']
引用将返回未定义的属性,这将导致等式检查失败并继续。我所说的混乱是指没有足够的额外属性来影响性能。如果它没有更快,尽管我认为它没有什么区别(将其更新为常规)。您希望获得哪个数组,即
选项
数组?或者您是指属性“id”为236的对象吗?您希望获取哪个数组,即
选项
数组?或者您是指属性“id”为236的对象?