我有一个数组:
var arr = [20122, 20133, 20144, 20155, 20177];
我有一个JSON对象:
[{
"ext": "20177",
"name": "SIP\/20177-000001e8",
"state": "Ringing"
}, {
"ext": "20122",
"name": "SIP\/20122-000001e7",
"state": "Ringing"
}]
我需要检查数组作为输入,并检查JSON
对象中是否存在数组值。
我试过如下:
var arr = [20122, 20133, 20144, 20155, 20177];
jQuery.map(resp, function(obj) {
if(jQuery.inArray(obj.ext,arr) == -1){
//not exist
}
})
但是这里JSON是输入。但我需要数组作为输入。
答案 0 :(得分:1)
我假设您在resp
中没有真正的JSON(字符串)(请记住,JSON是用于数据交换的文本符号;如果您正在处理JavaScript源代码,而不是处理字符串,你不是在处理JSON),但是它已经被解析成了一个对象数组(如果{{1},jQuery可能会为你做这件事。是ajax调用的响应)。 (如果resp
是包含resp
的字符串,请使用JSON
进行解析,然后继续其余的答案。)
JSON.parse
执行inArray
(类型和值)检查。您的数组包含数字。对象的===
属性值为 strings 。
更改数组以包含字符串,或者在比较时将ext
属性值转换为数字:
ext
另请注意,您通常会使用if(jQuery.inArray(+obj.ext,arr) == -1){
// ---------------^
的返回值;否则,你会使用jQuery.map
。
示例(如果您使用结果,请保留jQuery.each
):
jQuery.map
var resp = [{"ext":"20177","name":"SIP\/20177-000001e8","state":"Ringing"},{"ext":"20122","name":"SIP\/20122-000001e7","state":"Ringing"}];
var arr = [20122, 20133, 20144, 20155, 20177];
jQuery.map(resp, function(obj) {
if(jQuery.inArray(+obj.ext,arr) == -1){
// -------------^
console.log("Not found: " + obj.ext);
} else {
console.log("Found: " + obj.ext);
}
});
旁注:如果您使用的是模糊的现代浏览器,则可以使用内置数组功能,而不是<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
,jQuery.map
和jQuery.each
:它们是数组本身上的jQuery.inArray
,map
和forEach
方法。它们在旧版浏览器上都是可填充/可上传的。
例如:
indexOf
var resp = [{"ext":"20177","name":"SIP\/20177-000001e8","state":"Ringing"},{"ext":"20122","name":"SIP\/20122-000001e7","state":"Ringing"}];
var arr = [20122, 20133, 20144, 20155, 20177];
resp.forEach(function(obj) {
if(arr.indexOf(+obj.ext) == -1){
console.log("Not found: " + obj.ext);
} else {
console.log("Found: " + obj.ext);
}
});
答案 1 :(得分:1)
如果输入是JSON,那么您需要先解析它:var data = JSON.parse(resp);
。示例:
var arr = [20122, 20133, 20144, 20155, 20177];
var resp = '[{"ext":"20177","name":"SIP\/20177-000001e8","state":"Ringing"},{"ext":"20122","name":"SIP\/20122-000001e7","state":"Ringing"}]';
var data = JSON.parse(resp); //<-- You need this to convert json to array
jQuery.each(data, function(i, obj) {
if(jQuery.inArray(obj.ext, arr) == -1){
console.log(obj.name+' Exists');
}
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
&#13;
答案 2 :(得分:1)
var arr = [20122, 20133, 20144, 20155, 20177],
resp = [{"ext":"20177","name":"SIP\/20177-000001e8","state":"Ringing"},{"ext":"20122","name":"SIP\/20122-000001e7","state":"Ringing"}],
$.each(arr, function (i, arritem) {
$.each(resp , function (i, jsonitem) {
if(obj.ext==arritem)
{
//match
}
else
{
//not match
}
}
}
答案 3 :(得分:1)
根据您的要求“但我需要数组作为输入” - 请考虑使用ES6“方式”中Array.forEach
和Array.map
函数的以下解决方案:
var arr = [20122, 20133, 20144, 20155, 20177],
resp = [{"ext":"20177","name":"SIP\/20177-000001e8","state":"Ringing"},{"ext":"20122","name":"SIP\/20122-000001e7","state":"Ringing"}],
exts = resp.map((o) => +o.ext),
result = {};
arr.forEach((v) => result[v] = (exts.indexOf(v) !== -1)? 1 : 0 );
console.log(result);
// value 1 means that arr value exists within json objects, 0 - not exists
// Object {20122: 1, 20133: 0, 20144: 0, 20155: 0, 20177: 1}
答案 4 :(得分:0)
试试这个:
$('document').ready(function() {
var arr = [20122, 20133, 20144, 20155, 20177];
var oJson = [{"ext":"20177","name":"SIP/20177-000001e8","state":"Ringing"},{"ext":"20122","name":"SIP/20122-000001e7","state":"Ringing"}]
$('button').on('click', function(e) {
var newArr = [];
$.each(oJson, function(key, value) {
if ($.inArray(value.ext, arr))
newArr.push(value.ext);
});
console.log(newArr);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Check</button>
答案 5 :(得分:0)
我认为您可以使用find数组方法&amp; forEach检查json中是否存在元素
如果存在这样的json对象,find
将返回该对象,否则它将返回undefined。
+用于字符串到数字转换,因为在arr
中元素是数字,而在jsonObj
中它们是字符串
var arr = [20122, 20133, 20144, 20155, 20177];
var jsonObj=[{"ext":"20177","name":"SIP\/20177-000001e8","state":"Ringing"},{"ext":"20122","name":"SIP\/20122-000001e7","state":"Ringing"}]
arr.forEach(function(item){
var _getValue ="";
var _isPresent=jsonObj.find(function(item2){
if(item == +item2.ext){
return item2;
}
else{
return false;
}
})
if(_isPresent !== undefined){
_getValue =_isPresent.ext;
}
else{
_getValue="Not matched";
}
document.write('<pre>'+_getValue+'</pre>')
})