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