0

I want to check if my ids exist in an array list. I tried some, like IndexOf or hasOwnProperty and more.

Hope someone can help me.

Thats my try

if(array.hasOwnProperty('3771245')) {
    alert('is in array');
} else {
    alert('is not in array');
}

Thats the array:

var array = [ 
  {
    id: 3771245,
    sku: 149
  }, 
  { 
    id: 125125125,
    sku: 149
  },
  { 
    id: 5351531,
    sku: 149
  }
];

And below are my items I want to check if they are in the array json

var items = [ { id: '3771245' }, { id: '37712415' } ];
5
  • Do you want to check if both 3771245,5351531 exist in the array? What is your desired output? Commented Sep 3, 2018 at 14:10
  • Yes, i will check if both exists. I changed a little bit, please check my code again Commented Sep 3, 2018 at 14:14
  • Both items must be checked if there both exists in the array Commented Sep 3, 2018 at 14:15
  • Could you please add your jsfiddle code to the question? This gives people an idea of [the direction of] your solution Commented Sep 3, 2018 at 14:20
  • const checkList = items.split(",").reduce((p, c) => (p.add(+c), p), new Set()); array.forEach(({ id }) => checkList.delete(id)); console.log(checkList.size); - this takes items in the string version, before your edit. Commented Sep 3, 2018 at 14:23

7 Answers 7

1

Use Array.prototype.filter(), then Array.prototype.map():

var array = [{
    id: 3771245,
    sku: 149,
  },
  {
    id: 125125125,
    sku: 149,
  },
  {
    id: 5351531,
    sku: 149,
  }
]

const searchIds = [3771245, 125125125];

const items = array
  .filter(i => searchIds.includes(i.id))
  .map((i) => { return { id: i.id } })

console.log(items)

Sign up to request clarification or add additional context in comments.

Comments

0

You can split the comma separated value and loop over to it to check the id value against the object inside the array. Note that the id is numeric so you need to prefix the value with + or use parseInt() to change that to number and check it inside the find() function. You can also use ECMAScript but that will not work in IE and old browsers.

var array = [{
    id: 3771245,
    sku: 149,
  },
  {
    id: 125125125,
    sku: 149,
  },
  {
    id: 5351531,
    sku: 149,
  }
]
var items = [ { id: '3771245' }, { id: '37712415' } ];
var match = true;
items.forEach(function(itemObj){
  var exist = array.find(function(obj){
    return obj.id === parseInt(itemObj.id);
  });
  if(!exist){
    match = false;
  }
});
if(match){
  alert('All matched');
} else {
  alert('Not matched');
}

Comments

0

You can split the search string by , and find the elements matching the search items

var array = [ { id: 3771245,
sku: 149,
 }, 
 { id: 125125125,
sku: 149,
 },
 { id: 5351531,
sku: 149,
 }];
 var items = '3771245,5351531';
items = items.split(',');
var matchedItems = [];
items.forEach(function(item){
var data = array.find( function( ele ) { 
    return ele.id == item;
} );
if(data){
matchedItems.push(data);
}

});
console.log(matchedItems);

Comments

0

Something like this should do the trick. If the list of items is short you can use this approach.

var array = [ { id: 3771245,
    sku: 149,
     }, 
     { id: 125125125,
    sku: 149,
     },
     { id: 5351531,
    sku: 149,
     }]
let values;
for(let i =0; i <array.length; i++){
      if(array[i].id.toString() === "125125125"){
      values=values+array[i].id.toString()+', ';
      }
}

Comments

0

    var array = [ { id: 3771245,
    sku: 149,
     }, 
     { id: 125125125,
    sku: 149,
     },
     { id: 5351531,
    sku: 149,
     }]
     
// usage
let index = findById(array, 3771245);
if(index!==false) {
	console.log("found in array on: ", index);
}


function findById(arr, id) {

	let exists = false;
	arr.forEach(function(element, i) {
  console.log(i);
  if(element.id==id) {
  	exists=i;
  }
});
	return exists;
}

I believe this is function you are looking for.

Comments

0

You can use Array.some function and check if an value from item array exists in array. It will return a Boolean depending on which you can create an object

var array = [{
    id: 3771245,
    sku: 149,
  },
  {
    id: 125125125,
    sku: 149,
  },
  {
    id: 5351531,
    sku: 149,
  }
]
var items = [{
  id: '3771245'
}, {
  id: '37712415'
}]

let ifExist = {};

items.forEach(function(item) {
  let __exist = array.some(function(elem) {
    return +item.id === elem.id

  })
  ifExist[item.id] = __exist
})

console.log(ifExist)

Comments

0

If you expect a simple true/false as a result, your function may look like this:

var array = [ 
  { id: 3771245,   sku: 149 }, 
  { id: 125125125, sku: 149 },
  { id: 5351531,   sku: 149 }
];

function checkIds(arr, ids) {
  return ids.every(id => (id = parseInt(id.id,10)) && arr.some(item => item.id === id))
}

console.log('All ids exist:', checkIds(array, [{id:'3771245'}, {id:'5351531'}]))

console.log('Not all ids exist:', checkIds(array, [{id:'3771245'}, {id:'5351532'}]))

While most of already posted solutions are functionally correct, I would recommend:

  • don't use map(...) on large list of ids to find, since even if first id does not exist, you'll still iterate over all objects containing ids and map them to some other values that will not be used;
  • don't use forEach(...) for the same reason
  • don't use filter(...) to avoid extra type casting and memory allocation for resulting array
  • if you know that all your ids are integers, cast to integer instead of string before compare values
  • don't use Number(...) - it will create an object of type Number and implicitly cast it to plain number every time it's compared to other value

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.