I have an array like this:
var array = [
{ name:"string123", value:"this", other: "that" },
{ name:"string2", value:"this", other: "that" },
{ name:"string12", value:"ths", other: "that" },
];
And now I have a string like 'string12'. Now with this string the output I want is to find the items that contains this string which is like:
var array = [
{ name:"string123", value:"this", other: "that" },
{ name:"string12", value:"ths", other: "that" },
];
Here's what I have tried:
const search = (nameKey, myArray) => {
for (var i = 0; i < myArray.length; i++) {
var newArr = [];
if (myArray[i].name.slice(0, nameKey.length + 1) === nameKey) {
newArr.push(myArray[i]);
}
return newArr;
}
}
var array = [
{ name:"string123", value:"this", other: "that" },
{ name:"string2", value:"this", other: "that" },
{ name:"string12", value:"ths", other: "that" },
];
var resultObject = search("string12", array);
console.log(resultObject);
But my solution is returning a blank array. Where am I going wrong with this?
The following things went wrong in your implementation:
for loop..slice().return newArr should be outside the for loop.const search = (nameKey, myArray) => {
var newArr = [];
for (var i = 0; i < myArray.length; i++) {
if (myArray[i].name.slice(0, nameKey.length) === nameKey) {
newArr.push(myArray[i]);
}
}
return newArr;
}
var array = [
{ name:"string123", value:"this", other: "that" },
{ name:"string2", value:"this", other: "that" },
{ name:"string12", value:"ths", other: "that" },
];
var resultObject = search("string12", array);
console.log(resultObject);
Using Array#filter and String#includes:
const arr = [ { name:"string123", value:"this", other: "that" }, { name:"string2", value:"this", other: "that" }, { name:"string12", value:"ths", other: "that" } ];
const res = arr.filter(({ name }) => name.includes('string12'));
console.log(res);
You can use String#startsWith instead of includes if you only need to check if the name starts with the string.
You could do this with Array.filter and startsWith function (docs). If you want to check string12 anywhere in name use includes instead of startsWith
var array = [
{ name:"string123", value:"this", other: "that" },
{ name:"string2", value:"this", other: "that" },
{ name:"string12", value:"ths", other: "that" },
];
const filtered = array.filter(item => item.name.startsWith("string12"));
console.log(filtered);