在JavaScript中,如何编写检查数据数组中是否存在值的方法的最佳方法是什么?
以下是我目前的情况:
var html = [];
html.push({
key: "/1/1.html",
value: "html 1 data"
});
if(doesKeyExist(html, "/1/1.html"))
{
alert(getValue(html, "/1/1.html"));
}
function doesKeyExist(arr, key)
{
$.each(arr, function (index, data) {
if(data.key === key)
return true;
});
return false;
}
function getValue(arr, key)
{
$.each(arr, function (index, data) {
if(data.key === key)
return data.value;
});
}
以上代码不会提示“html 1 data”的值,并且控制台中不会显示错误。
我可以请求上面的代码吗?
由于
答案 0 :(得分:1)
问题是因为return
块中的$.each
语句是从doesKeyExist()
和getValue()
函数中的匿名函数而不是返回的。你需要稍微改变你的逻辑:
var html = [];
html.push({
key: "/1/1.html",
value: "html 1 data"
});
if (doesKeyExist(html, "/1/1.html")) {
alert(getValue(html, "/1/1.html"));
}
function doesKeyExist(arr, key) {
var result = false;
$.each(arr, function (index, data) {
if (data.key === key) {
result = true;
return; // stop the loop
}
});
return result;
}
function getValue(arr, key) {
var result = '';
$.each(arr, function (index, data) {
if (data.key === key) {
result = data.value;
return; // stop the loop
}
});
return result;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 1 :(得分:0)
问题是因为你在每个匿名函数范围内返回一个值,这不会将值返回给函数,所以它总是返回false。
所以你可以使用一个函数变量并将其返回。
代码:
var html = [];
html.push({
key: "/1/1.html",
value: "html 1 data"
});
html.push({
key: "/1/2.html",
value: "html 2 data"
});
if(doesKeyExist(html, "/1/1.html"))
{
alert(getValue(html, "/1/1.html"));
}
function doesKeyExist(arr, key)
{
var exist= false;
$.each(arr, function (index, data) {
if(data.key === key) {
exist=true;
return false;
}
});
return exist;
}
function getValue(arr, key)
{
var value= '';
$.each(arr, function (index, data) {
if(data.key === key) {
value=data.value;
return false;
}
});
return value;
}
答案 2 :(得分:0)
你说你只是想检查数组中是否存在值,请检查http://jsfiddle.net/elviz/nrfm943e/
var html = [];
html.push({
key: "/1/1.html",
value: "html 1 data"
});
$.each(html, function (index, data) {
if(data.value){
alert(data.value);
}
});