0

Jquery にはオブジェクト型変数があります。

var obj = *{"1234" : "xx", "4321" : "yy", "5555" : "hh", "2321" : "aa" };*

プロパティ名「5555」からオブジェクトの最後までのすべてのプロパティを削除したいとしましょう(つまり、したいことを意味しますdelete obj['5555']delete obj['2321']。私はそれを行うための最も賢い方法、トラフループに興味があります。

配列で使用しますsplice(2, arr.length)が、混乱しています。

4

5 に答える 5

1

オブジェクトのプロパティの順序に関する保証はありません。サンプル オブジェクトをコンソールに貼り付けると、次のように表示されます。

> obj = {"1234" : "xx", "4321" : "yy", "5555" : "hh", "2321" : "aa" }
  Object {1234: "xx", 2321: "aa", 4321: "yy", 5555: "hh"}

ご覧のとおり、chrome はプロパティを配列のように昇順で並べています。わかりませんが、IE はこれを行わない可能性があります...おそらく、いくつかのあいまいなブラウザーはプロパティを降順で並べます...実際のオブジェクトがどのように見えるかを知る方法はないので、おそらく再考してください.
すべてのプロパティが本質的に数値である場合、配列を使用しても問題はありません.JSでは、Arrayプロトタイプは拡張されたものにすぎませんObject:

obj = [];
obj[1234] = 'xx';
obj[2321] = 'aa';
obj[5555] = 'hh';

いずれにせよ、数値インデックスは内部的に文字列に強制されるため (配列はオブジェクトであるため)、JS は無限の空のインデックスを作成しません。解決するobj[200]のと同じように解決しobjectLiteral.undefinedPropertyます。要求されたプロパティが見つからない場合は、undefined を返します。

それらはあなたが進むにつれて追加されますが、ここでは2つの方法があります:

//Assume simpel object (non-nested)
var newObj = JSON.parse(JSON.stringify(obj).replace(/\{|,\s*"5{4}"\s*:.+$/,'}'));

これは、最も簡単な方法だと思いますが、あまり信頼できません。最も「試行錯誤された」アプローチは次のとおりです。

var unset = false;
for (var prop in obj)
{
    if (obj.hasOwnProperty(prop))
    {
        unset = unset || !!(prop === '5555');
        if (unset === true)
        {
            delete(obj[prop]);
        }
    }
}

最後のアプローチでは、すべてのキーを含む配列を作成します。これを反復処理し、その方法でプロパティを削除します。完全を期すためにここに記載しています。ただし、ES5 仕様をサポートするブラウザーが必要なため (悲しいことに、すべてのブラウザーがサポートしているわけではありません)、使用しません。上記のコードに勝る利点はありません。

var keys = Object.keys(obj).sort(),//call sort to assure ascending order
toDelete = keys.splice(keys.indexOf('5555'), keys.length).sort();
for(var i=0;i<toDelete.length;i++)
{
    delete obj[toDelete[i]];
}
于 2013-08-23T09:24:59.323 に答える
0

検索対象の obj と検索対象の値を関数にプッシュすると、指定した値までのプロパティのみを含む新しいオブジェクトが返されます。

function returnNewobj(obj, value) {
  var newObj = {};
  for (var prop in obj) {
    if (obj.hasOwnProperty(prop)) {
      if (prop === value) return newObj;
      newObj[prop] = obj[prop];
    }
  }
  return newObj;
}

編集:おそらく必要ありませんが、安全のために hasOwnProperty 行を追加しました。

Edit2:要素が配列に追加されるようなオブジェクトの最後ではなく、新しいプロパティがアルファベット順にオブジェクトに追加されることを指摘する価値があります。だからそれに引っかからないでください。

于 2013-08-23T09:20:29.710 に答える
0

プロパティ名を削除するのは非常に難しいですが、プロパティ値をnullまたは未定義にすることはできますが、プロパティを削除するのは難しいですが、必要なプロパティを新しいオブジェクトにコピーすることができます.状況の種類

    objCopyTo[strToPropertyName] = objCopyFrom[strPropertyName];

ここにフィドルがあります

于 2013-08-23T09:41:40.033 に答える