3

私は現在、次のjQueryコレクション/オブジェクト:

[li.row-0, li.row-1, li.row-2, li-row-2, li.row-2, li.row-3]

各クラス名は、前のメソッドによって各要素に動的に追加されます。クラス名の唯一の一貫した部分はrow-. 数値は 0 ~ ∞ のいずれかです。

同じ動的クラス名でグループ化された要素の新しい配列またはオブジェクトを作成したい:

[li.row-0]
[li.row-1]
[li.row-2, li.row-2, li.row-2, li.row-2]
[li.row-3]

上記は結果の推測にすぎません。これを達成する最善の方法が 100% わかっているわけではありません。

目的は、.row-0, .row-1, .row-2, .row-3個々の行の要素をループして何かを実行できるようにすることです。

4

3 に答える 3

2

私はこれをします:

var map = [].reduce.call(arr, function(map, v){
     (map[v.className]||(map[v.className]=[])).push(v);
     return map;
}, {});
var arr2 = [];
for (var className in map)  arr2.push(map[className]);

reduce、キーとしてクラス名を持ち、そのクラス名を持つ要素の配列を値として持つマップを構築します。

標準配列、jQuery コレクション、ノードリストなどで機能するように、[].reduce.call(arr,代わりに使用します。arr.reduce(

次に、ループはそのマップから配列を構築します。最終的な配列よりもマップの方が役立つ場合があります。

于 2013-08-09T11:50:09.917 に答える
1

私は次のようなことをします:

var arr = ['li.row-0', 'li.row-1', 'li.row-2', 'li.row-2', 'li.row-2', 'li.row-3'];
var result = {};
$.each(arr, function (index, item) {
    var ind = item.toString().split('row-')[1];
    (result[ind] || (result[ind] = [])).push(item);
});
console.log(result);
于 2013-08-09T12:38:03.900 に答える