1

これは私のオブジェクトがどのように見えるかです (私はそれがどのようにフォーマットされているかをあまり制御できません):

[{
    "Country": "Spain",
    "info info1": 0.329235716,
    "info info2": 0.447683684,
    "info info3": 0.447683747
}, {
    "Country": "Chile",
    "info info1": 1.302673893,
    "info info2": 1.357820775,
    "info info3": 1.35626442
}, {
    "Country": "USA",
    "info info1": 7.78805016,
    "info info2": 26.59681951,
    "info info3": 9.200900779
}]

データを保持する必要があるさまざまな国がありますが、国名を変更します。完全に省略しなければならない国もあります。

これは、一度に噛むことができないほど噛んだときの 1 つであり、これまでに行った作業はタイヤを回転させるだけです。

$.each(output_json, function() {
  $.each(this, function(k, v) {
    console.log(k);
  });
});

この方法でループしようとしましたが、キーと値のペアを取得しているだけで、内部で見つけたものに基づいてエントリ全体を削除する方法がわかりません。

私が説明した方法でオブジェクトをすばやく操作できる関数/ライブラリ/jQueryプラグインを知っている人はいますか?

4

7 に答える 7

3

jQuery のことは忘れてください。これは純粋な JavaScript タスクです。

  • 配列をループするには、 を使用for (var i=0; i<array.length; i++)し、オブジェクトをループするにはfor (var i in object)
  • 配列エントリを削除するには、 を使用しますsplice()。オブジェクト属性を削除するには、 を使用しますdelete object[key];
  • 配列をフィルタリングするには、最新の JavaScript バージョンではfilter()、すべてのエントリに対してコールバック関数を使用できます。新しい配列を作成します。オブジェクトにはそのような (ネイティブの) メソッドはありません。

アンダースコアなどの便利なユーティリティ関数を備えたライブラリがいくつかある場合があります。でもJSを学ぶにはネイティブメソッドでやったほうがいいかもしれません。

于 2012-04-04T21:34:17.307 に答える
3

Underscore.jsは、すべてのデータに使用するライブラリです。データに役立つ関数は次のとおりです。eachreject、およびgroupBy

于 2012-04-04T21:25:33.953 に答える
2
$(output_json).each(function(i){
    if (this["Country"] == "USA") output_json.splice(i,1);
    else if (this["Country"] == "Spain") this["Country"] = "Brazil";
    else {
        var country = this;
        $(this).each(function(i){
            if (this["info info2"] == 1.302673893) {
                country.splice(i,1);
            } 
        });
    }
})

これがコードの骨組みです - 名前の変更や削除などを検出するより良い方法があることは明らかです。しかし、splice メソッドと角括弧を使用すると、delete を使用するよりも安全になり、複数の配列を維持するよりも効率的になります。

于 2012-04-04T21:57:22.650 に答える
1

次のコードは、あなたが求めていることを大まかに実行すると思います。動作中のフィドルをチェックしてください: http://jsfiddle.net/pUhDR/3/ ところで、@Gazler に同意します。アンダースコア ライブラリを使用できます。これよりも高レベルで読みやすいです:

var countriesString = JSON.stringify([{
    "Country": "Spain",
    "info info1": 0.329235716,
    "info info2": 0.447683684,
    "info info3": 0.447683747
}, {
    "Country": "Chile",
    "info info1": 1.302673893,
    "info info2": 1.357820775,
    "info info3": 1.35626442
}, {
    "Country": "USA",
    "info info1": 7.78805016,
    "info info2": 26.59681951,
    "info info3": 9.200900779
}]);

var countries = JSON.parse(countriesString);

// create new array
var newCountriesArray = new Array();
// exclude some countries
var excludeCountries = new Object();
excludeCountries['Spain'] = true;
// rename some countries
var renameCountries = new Object();
renameCountries['USA'] = 'United States of America';

for (index in countries) {
    if (countries[index].Country in renameCountries) {
        countries[index].Country = renameCountries[countries[index].Country];
    }
    if (!(countries[index].Country in excludeCountries)) {
        newCountriesArray.push(countries[index]);
    }
}

alert(JSON.stringify(newCountriesArray));
于 2012-04-04T21:34:29.293 に答える
1

必要な操作を行うコードを直接記述したくない場合は、コレクションを操作するための便利な関数を多数パッケージ化したunderscore.jsなどのライブラリを使用できます。したがって、JSON を解析した後、たとえば reject() を使用して、コレクション内の特定のオブジェクトを除外できます。

于 2012-04-04T21:26:42.820 に答える
0

delete配列で演算子を使用して、要素を削除できます。

  1. 削除したいアイテムのリストを作成します。以下のケースでは「チリ」
  2. リストを繰り返し処理し、アイテムを削除します

デモ

コード:

var toRemove = [];
$.each(output_json, function(i) {
  $.each(this, function(k, v) {
    if (v == 'Chile') toRemove.push(i);
  });
});

//remove all marked
for (var i = 0; i < toRemove.length; i++) {
    delete output_json[toRemove[i]];
}
于 2012-04-04T21:36:41.813 に答える
0

現在反復しているコレクション内のいくつかのインデックスを削除する必要があるため、次のように反復を反転することを選択します。

const fields = [{key: "entry1",},{key: "entry2",},{key: "entry3",},{key: "entry4",},{key: "entry5",},]

const arrToDelete = ['entry3', 'entry4']
for (let idx = fields.length - 1; idx >= 0; idx--) {
  if (arrToDelete.includes(fields[idx].key)){
    fields.splice(idx, 1);
  }
}
于 2022-02-18T10:03:15.280 に答える