如何检查数组中是否存在对象值? 如果没有推送值
小提琴:https://jsfiddle.net/h9zctLqz/
HTML:
<form>
<input type="text" id="input" name="input">
<button type="button" name="save">save</button>
</form>
jquery的:
$('document').ready(function(){
$myData = [];
$('button[name=save]').on('click', function(){
var input = $('#input').val();
$myData.indexOf({'input':input}) === -1 ? $myData.push({'input':input}) : console.log('already exists');
console.log($myData);
});
});
答案 0 :(得分:8)
你应该知道的第一件事是,在javascript:
({ 'input': input} === { 'input': input }) // returns false
===
比较对象引用,而不是对象的外观。
这意味着indexOf({input: input})
永远不会返回-1以外的任何内容。
您可以使用some
解决此问题。 some
需要一个比较内容的函数,因此您可以使用indexOf
编写自己的“等于”(而不是===
。)
if ($myData.some(item => item.input === input)) console.log("exists")
else $myData.push({input: input});
答案 1 :(得分:2)
试试这个:
struct
在 find() 如果数组中有元素,则method返回数组中的值 满足提供的测试功能。否则未定义 返回。
如果要获取匹配元素数组,请使用 filter() 方法改为:
<rewrite>
<rules>
<rule name="fixdata" stopProcessing="true">
<match url="\?(.*)\?(.*)$" ignoreCase="false" />
<action type="Redirect" redirectType="Permanent" url="http://www.example.com/{R:1}&{R:2}" />
</rule>
</rules>
</rewrite>
如果您想获得
if(myArray.find(x => x.input === input)){ console.log("Exist"); } else{ anotherarray.push({'input':input}); }
属性的数组,您可以这样做 这个 map() 方法:
myArray.filter(x => x.id === input)
答案 2 :(得分:0)
你应该只使用 includes 数组方法 array.includes(某些值),然后如果它不包含,则返回一个你可以推送的bool。注意这是普通的Javascript。 Array includes method
let array = [1, 2, 3, 4, 5];
console.log(array)
if (array.includes(2)) {
array.push(20);
}
console.log(array)
答案 3 :(得分:0)
这些对象将有两个不同的引用,因此它总是返回false。 使用.some或.find并对.input字段进行值比较。
const itemExists = $myData.some(el => el.input === input);
if(itemExists) {
console.log("Already exsists");
}
else {
$myData.push({'input':input})
}
答案 4 :(得分:0)
看起来像哈希表的完美用例:
var hash={},result=[];
$('button[name=save]').on('click', function(){
var input = $('#input').val();
if(hash[input]){
hash[input].quantity++;
}else{
result.push(hash[input]={input,quantity:1});
}
});
答案 5 :(得分:0)
indexOf适用于字符串,但要检查数组,你不能简单地使用它。
其他方法可能是迭代整个数组并检查,但就时间复杂度而言,这将是非常昂贵的。
所以最好的答案是在这种情况下使用简单的地图。请尝试以下 -
$('document').ready(function(){
var myData = new Object(); // or var map = {};
$('button[name=save]').on('click', function(){
var input = $('#input').val();
if(myData[input] != input)
myData[input] = input;
else
console.log('already exists');
});
});