Javascript 购物篮指数
我试图使用indexOf来确定我传递给它的对象是否已经在数组中。它似乎不起作用。下面是将项添加到数组的代码 Javascript:Javascript 购物篮指数,javascript,indexof,Javascript,Indexof,我试图使用indexOf来确定我传递给它的对象是否已经在数组中。它似乎不起作用。下面是将项添加到数组的代码 Javascript: add: function(id, item, description, price, itemObj) { if(items.indexOf(itemObj) == 1) { console.log(itemObj); items.forEach(function(item){
add: function(id, item, description, price, itemObj) {
if(items.indexOf(itemObj) == 1) {
console.log(itemObj);
items.forEach(function(item){
if(item.id === id){
item.itemCount += 1;
};
});
} else {
console.log(itemObj);
items.push(new basket.Item(id, item, description, price));
};
basket.print();
}
更具描述性的是,它永远不会运行if语句,并且总是向数组传递新对象。我不确定indexOf是否在数组中查找匹配的值。我认为它只是匹配字符串中的一个子字符串。另外,您应该检查返回值是否大于或等于零:
if(items.join("").indexOf(itemObj) >= 0) {
好的,join函数连接这些值以生成一个字符串,例如:
items = ["first", "second", "third"];
items.join("");
// now items = "firstsecondthird";
var ind = items.join("").indexOf("first"); //ind here is greater or equal than 0
var ind = items.join("").indexOf("firstone"); //ind here is equal -1 (any comparison in the string)
请注意,indexOf正在搜索字符串中的第一个比较。如果您有此字符串
abcdefga
,并且使用indexOf
查找a
,则返回值将为0,因为第一次比较是在开头。要搜索最后一次比较,请使用lastIndexOf
调用函数中的项,并以与调用不一致的方式使用下面的项。很抱歉,您能解释一下吗?您有一个函数(id,item
,description…在您使用的代码item
s中进一步说明,而不是在forEach函数中使用item
的indexOf和forEach的item。items与item不同。items是一个全局数组,正在检查其中as item是传递到方法中的变量。明白了…正在使用代码我明白了。全局项会让事情变得混乱。你能解释得更清楚一点吗?这个答案是错误的-Array.prototype.indexOf()
确实存在(尽管在一些旧浏览器中不可用),并且建议的解决方案只适用于字符串匹配,如items.join(“”)
将首先将数组的每个元素转换为字符串。对于对象,它可能是[object object]
,因此不会太有用。第一:我不知道项
是对象的集合。第二:我开始回答“我不确定indexOf是否在数组中查找匹配的值”.我只是想帮忙。