Javascript 检查子对象是否存在,如果存在,请添加到对象
我正在尝试将一个对象添加到另一个对象 假设我有两个对象Javascript 检查子对象是否存在,如果存在,请添加到对象,javascript,jquery,Javascript,Jquery,我正在尝试将一个对象添加到另一个对象 假设我有两个对象selecteditembj和selectedItemQueue。我想将selecteditembj添加到selecteditemQueue中,但前提是该selecteditembject与selecteditemQueue中的任何对象都不匹配 假设我这里有一个物体: var selecteditemObj = [ { "market_hash_name":"Chroma 2 Case Key 1", "asse
selecteditembj
和selectedItemQueue
。我想将selecteditembj
添加到selecteditemQueue
中,但前提是该selecteditembject
与selecteditemQueue
中的任何对象都不匹配
假设我这里有一个物体:
var selecteditemObj = [
{
"market_hash_name":"Chroma 2 Case Key 1",
"assetid":"92700754417_143965972",
"amount":1,
"image":"https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXX7gNTPcUxuxpJSXPbQv2S1MDeXkh6LBBOie3rKFRh16PKd2pDvozixtSOwaP2ar7SlzIA6sEo2rHCpdyhjAGxr0A6MHezetG0RZXdTA/"
}];
var selectedItemQueue = [
{
"market_hash_name":"Chroma 2 Case Key 2",
"assetid":"92700754667_143865972",
"amount":1,
"image":"https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXX7gNTPcUxuxpJSXPbQv2S1MDeXkh6LBBOie3rKFRh16PKd2pDvozixtSOwaP2ar7SlzIA6sEo2rHCpdyhjAGxr0A6MHezetG0RZXdTA/"
},
{
"market_hash_name":"Shadow Case Key 3",
"assetid":"1293611210722_143865972",
"amount":1,
"image":"https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXX7gNTPcUxuxpJSXPbQv2S1MDeXkh6LBBOiePrKF4wi6aaIGwStN_jl4bSzvXwMO6AwDlSvsYoiOiZ8dij3QbtqkU9ZnezetFWWxusZg/"
},
{
"market_hash_name":"Shadow Case Key 4",
"assetid":"123393510722_143861972",
"amount":1,
"image":"https://steamcommunity-a.akamaihd.net/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXX7gNTPcUxuxpJSXPbQv2S1MDeXkh6LBBOiePrKF4wi6aaIGwStN_jl4bSzvXwMO6AwDlSvsYoiOiZ8dij3QbtqkU9ZnezetFWWxusZg/"
}
];
这是我的尝试,它添加到队列中,但不检查子对象是否存在。我怎样才能补充呢
function addItemToSelectedQueue(assetId){
var itemObj = findItemById(assetId);
var queueHasItem = false;
for (var i = selectedItemQueue.length - 1; i >= 0; i--) {
if (selectedItemQueue[i] === itemObj) {
queueHasItem == true;
};
};
if (queueHasItem == false) {
selectedItemQueue.push(itemObj);
updateSelecteditems();
};
}
像这样的怎么样?我假设
market\u hash\u name
用于区分每个对象
var selecteditemObj = [
{
"market_hash_name":"Chroma 2 Case Key 1",
}
];
var selectedItemQueue = [
{
"market_hash_name":"Chroma 2 Case Key 2",
},
{
"market_hash_name":"Chroma 2 Case Key 3",
}
];
function addItemObjIfNotExist(obj1, obj2, id) {
for(var i = 0, len = obj2.length; i < len; i++) {
if(obj1[1][id] !== obj2[i][id]) {
obj2.push(obj1);
}
}
return obj2;
}
console.log(addItemObjIfNotExist(selectedItemQueue,selecteditemObj, 'market_hash_name'));
我会这样做:
function addItemToSelectedQueue(fromobj, toobj){
var found = false;
for(var x=0; x<toobj.length; x++){
if(toobj[x].market_hash_name == fromobj[0].market_hash_name){
found = true;
}
}
if(found == false){
toobj.push(fromobj[0]);
}
}
对我来说非常好 您不能通过“selectedItemQueue[i]==itemObj”来检查匹配,您应该逐个比较属性(或键值,如果有),并且只有所有属性匹配,queueHasItem更新为true。次要注意:如果块以分号结束,则没有理由结束
。事实上,我建议你不要这样做。另一个小提示,你可以使用!条件
而不是条件==false
用于b使用相等运算符比较两个对象,检查它们是否是相同的对象,而不是它们是否具有相同的值。有关更多信息,请参见此问题:首先,选择一个id属性来比较等式,它可能是assetid、market\u hash\u名称,也可能是两者的组合。此外,使用下划线或Lodash之类的库,这类东西会更干净。这是什么呢:
function addItemToSelectedQueue(fromobj, toobj){
var found = false;
for(var x=0; x<toobj.length; x++){
if(toobj[x].market_hash_name == fromobj[0].market_hash_name){
found = true;
}
}
if(found == false){
toobj.push(fromobj[0]);
}
}
addItemToSelectedQueue(selecteditemObj, selectedItemQueue);