JavaScript-按名称设置对象键

JavaScript-按名称设置对象键,javascript,object,key,Javascript,Object,Key,我有一个进入JS函数的实时名称提要,我想创建一个对象,例如: var renderObj= { {"name": "test1", "size": 3938}, {"name": "test2", "size": 3812}, {"name": "test3", "size": 6714} }; 因此,renderObj开始时为空。每次输入名称时,我都需要检查对象中是否存在该名称。如果有,请更新大小 有人建议吗?对象中不能有未命名的项。改用数组: var renderObj = [ {"n

我有一个进入JS函数的实时名称提要,我想创建一个对象,例如:

var renderObj= {
{"name": "test1", "size": 3938},
{"name": "test2", "size": 3812},
{"name": "test3", "size": 6714}
};
因此,
renderObj
开始时为空。每次输入名称时,我都需要检查对象中是否存在该名称。如果有,请更新大小


有人建议吗?

对象中不能有未命名的项。改用数组:

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;
  }
}

对象中不能有未命名的项。改用数组:

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;
  }
}

这就是您可能想要的结构:

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..

这就是您可能想要的结构:

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..

我将保留一个与对象并排的名称映射,以及一个用于检查该映射的函数:

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 );
}

我将保留一个与对象并排的名称映射,以及一个用于检查该映射的函数:

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 );
}

示例的可能副本不是正确的JavaScript。我假设您有一个对象数组…您的示例的可能副本不是正确的JavaScript。我假设你有一个数组的对象…这是理想的。是的,在这个例子中,数组更适合我所需要的。谢谢你的帮助!本,这很理想。是的,在这个例子中,数组更适合我所需要的。谢谢你的帮助!本。