3

次のコードがあります( jsfiddle ):

var obj = {
    x: 48,
    y: 13
};
var main = [{
    x: 8,
    y: 3
}, {
    x: 82,
    y: 31
}, {
    x: 48,
    y: 13
}, {
    x: 28,
    y: 31
}];



var result = $.grep(main, function (e) {
    return ((e.x == obj.x) && (e.y == obj.y));
});

var index = main.indexOf(obj);
if (result.length > 0)
    main.splice(index, 1);

オブジェクトの配列であることは理解しています。自分で繰り返してインデックスを取得し、スプライスする以外に方法はありますか?

4

3 に答える 3

1

あなたは実際にすでにインデックスを持っています。メソッドのコールバックは、$.grep()2 番目の引数としてインデックスを受け取ります。したがって、次のように書くことができます。

var obj = {
    x: 48,
    y: 13
};
var main = [{
    x: 8,
    y: 3
}, {
    x: 82,
    y: 31
}, {
    x: 48,
    y: 13
}, {
    x: 28,
    y: 31
}];


var index;
var result = $.grep(main, function (e, i) {
    var res = (e.x == obj.x) && (e.y == obj.y);
    if (res) {
        index = i;
    }
    return res;
});

if (result.length > 0)
    main.splice(index, 1);

複数の出現がある場合、これにより最後のインデックスが得られます。最初のインデックスが必要な場合 (indexOf配列で使用して取得する場合)、一度index設定するとオーバーライドされないことを確認する必要があります。

フィドル

于 2013-07-22T22:19:41.773 に答える
0

どうやらあなたが探しているのは連想配列です。メイン配列を「連想配列」(実際にはオブジェクト) として書き換えることができます。

var main = {
    "8": {
        "3": {...}
    },
    "82": {
        "31": {...}
    },
// etc.
};

次に、探しているのは次のとおりです。

main[obj.x][obj.y]
于 2013-07-22T22:37:45.310 に答える