2012-05-07 30 views
0

设置对象键我有进入JS函数名的实时输入,我想创建一个对象,例如:JavaScript的 - 按名称

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

所以renderObj是空的开始。每次名称进入时,我都需要检查它是否存在于对象中。如果是,请更新大小。

任何人都可以建议吗?

+0

可能重复(http://stackoverflow.com/questions/8234211/javasccript-find-element-in-array-of-object) –

+4

你的例子是不正确的JavaScript。我假设你有一组对象... –

回答

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

这是理想的。是的,这个例子中的数组更适合我需要的东西。 感谢您的协助! 本。 – Ben

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.. 
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); 
} 
的[javasccript找到对象的数组元素]