0

JS 関数に入る名前のリアルタイム フィードがあり、次のようなオブジェクトを作成したいと考えています。

var renderObj= {
{"name": "test1", "size": 3938},
{"name": "test2", "size": 3812},
{"name": "test3", "size": 6714}
};

だからrenderObj、始めるのは空です。名前が入るたびに、それがオブジェクトに存在するかどうかを確認する必要があります。その場合は、サイズを更新します。

誰でもアドバイスできますか?

4

3 に答える 3

2

オブジェクトに名前のないアイテムを含めることはできません。代わりに配列を使用します。

var renderObj = [
  {"name": "test1", "size": 3938},
  {"name": "test2", "size": 3812},
  {"name": "test3", "size": 6714}
];

配列をループして、名前が存在するかどうかを確認します。

var index = -1;
for (var i = 0; i < renderObj.Length; i++) {
  if (renderObj[i].name == name) {
    index = i;
    break;
  }
}

今すぐ結果を確認してください。名前がまだ存在しない場合は、オブジェクトを追加したいと思います。サイズをどのように更新したいかは言わなかったので、新しい値を前の値に追加したいと思ったと思います:

if (index == -1) {
  renderObj.push({ name: name, size: size });
} else {
  renderObj[index].size += size;
}
于 2012-05-07T11:11:09.180 に答える
1

それはおそらくあなたが望む構造です:

var renderObj= {
    "test1" : 3938,
    "test2" : 3812,
    "test3" : 6714
};

もちろん、次のような完全なオブジェクトを持つことができます。

var renderObj= {
    "test1" : {"size": 3938},
    "test2" : {"size": 3812},
    "test3" : {"size": 6714}
};

重要な点は、オブジェクトのプロパティが「キー」であるため、名前が に含まれているかどうかを簡単に確認できることですrenderObj

function addItem(obj, name) {
   var value = obj[name]
   if (typeof value === "number")
       obj[name] = value + 1
   else
       obj[name] = 1
}

より複雑なオブジェクトの場合:

function addItem(obj, name) {
   var value = obj[name]

   if (value)
       value.size++ 
   else
       obj[name] = {"size": 1}
}

その後:

addItem(renderObj, "test1")
addItem(renderObj, "test4")
// etc..
于 2012-05-07T11:23:27.450 に答える
0

オブジェクトと並べて名前のマップを保持し、そのマップをチェックする関数を保持します。

var renderObj = [
      { name: "test1", size: 3938},
      { name: "test2", size: 3812},
      { name: "test3", size: 6714}
    ]
  , nameMap = {}
  ;

function notAlreadyInrenderObj( newObj ){
   //IE7 and above, use typeof ... === "undefined" if you need lower browsers
  return ( undefined === nameMap[newObj.name] );
}

次に、新しいオブジェクトを追加します。

if( notAlreadyInrenderObj( ojb ) ){
  nameMap[newObj.name] = renderObj.length; //in case you need to find it quickly later
  renderObj.push( ojb );
}
于 2012-05-07T11:23:42.757 に答える