Javascript 对于每个数组值,检查它是否在json数组中。如果是,则跳过json数组以进行下一次迭代
如果标题有点混乱,很抱歉。不知道该怎么说 我有一系列的日期:Javascript 对于每个数组值,检查它是否在json数组中。如果是,则跳过json数组以进行下一次迭代,javascript,jquery,angularjs,arrays,json,Javascript,Jquery,Angularjs,Arrays,Json,如果标题有点混乱,很抱歉。不知道该怎么说 我有一系列的日期: var dateRange = ["2017-08-21", "2017-08-22", "2017-08-23", "2017-08-24", "2017-08-25", "2017-08-26", "2017-08-27"]; 我还有一个包含日期的json数据数组 var jsonArray = [ { date: "2017-08-21", edit: false,
var dateRange = ["2017-08-21", "2017-08-22", "2017-08-23", "2017-08-24", "2017-08-25", "2017-08-26", "2017-08-27"];
我还有一个包含日期的json数据数组
var jsonArray = [
{
date: "2017-08-21",
edit: false,
text: "some text"
},
{
date: "2017-08-23", //notice skipped 2017-08-22
edit: false,
text: "some text"
},
...
];
因此,我要做的是检查jsonArray
中的每个日期,如果dateRange
中的任何日期都不存在jsonArray
,请采取措施
我当时的做法是对日期范围中的每个日期执行索引,但我意识到,例如“2017-08-23”
与“2017-08-21”
相比,将触发,但我不希望触发,因为“2017-08-23”
实际上存在于数组中
这有意义吗
谢谢你的帮助 天真的方法是O(n^2),即:
var jsonArray=[
{
日期:“2017-08-21”,
编辑:false,
文本:“一些文本”
},
{
日期:“2017-08-23”//通知跳过2017-08-22
编辑:false,
文本:“一些文本”
},
];
var日期范围=[“2017-08-21”、“2017-08-22”、“2017-08-23”、“2017-08-24”、“2017-08-25”、“2017-08-26”、“2017-08-27”];
对于(var i=0;i
天真的方法是O(n^2),即:
var jsonArray=[
{
日期:“2017-08-21”,
编辑:false,
文本:“一些文本”
},
{
日期:“2017-08-23”//通知跳过2017-08-22
编辑:false,
文本:“一些文本”
},
];
var日期范围=[“2017-08-21”、“2017-08-22”、“2017-08-23”、“2017-08-24”、“2017-08-25”、“2017-08-26”、“2017-08-27”];
对于(var i=0;i }
我不知道我是否得到了它,但您想检查jsonArray
中的任何项目是否在dateRange
中包含日期,对吗
您可以执行以下操作:
让yourKey=jsonArray.some((项)=>{
return dateRange.contains(item.date)
})
如果任何jsonArray项目日期与dateRange日期匹配,则会将true
返回到yourKey
。是这样吗
[编辑]
如果要检查每个json数组项并执行某些操作,请执行以下操作:
jsonArray.forEach((item) => {
if (dateRange.contains(item.date)) {
// The date is in the array, do something
} else {
// The date is not in the array, do something else.
}
})
我不知道我是否得到了它,但您想检查jsonArray
中的任何项目是否在dateRange
中包含日期,对吗
您可以执行以下操作:
让yourKey=jsonArray.some((项)=>{
return dateRange.contains(item.date)
})
如果任何jsonArray项目日期与dateRange日期匹配,则会将true
返回到yourKey
。是这样吗
[编辑]
如果要检查每个json数组项并执行某些操作,请执行以下操作:
jsonArray.forEach((item) => {
if (dateRange.contains(item.date)) {
// The date is in the array, do something
} else {
// The date is not in the array, do something else.
}
})
是这样的:
函数DateRangeTester(startDateString,endDateString){
var start=新日期(startDateString).getTime();
var end=新日期(endDateString).getTime();
this.test=函数(testDateString、passFunc、failFunc、passFuncContext、failFuncContext){
var pc=passFuncContext | | this;
var fc=failFuncContext | | this;
var test=新日期(testDateString).getTime();
如果(test>=start&&test是这样的:
函数DateRangeTester(startDateString,endDateString){
var start=新日期(startDateString).getTime();
var end=新日期(endDateString).getTime();
this.test=函数(testDateString、passFunc、failFunc、passFuncContext、failFuncContext){
var pc=passFuncContext | | this;
var fc=failFuncContext | | this;
var test=新日期(testDateString).getTime();
如果(test>=start&&test“我也有一个json数组”-不,你有一个对象数组;这个问题中没有json。无论如何,我不理解你关于indexOf()
不起作用的说明,因为.indexOf()
不会将“2017-08-23”与“2017-08-21”匹配-你能用你的问题来展示你尝试过的代码吗?@nnnnnn问题是如果indexOf()
会失败,因为将2017-08-23
与2017-08-21
进行比较是错误的…我想检查数组元素是否在对象数组中的任何位置..这是否更有意义?不是真的。如果您在jsonArray
中迭代项目,并想测试当前项目的日期是否为空在另一个数组中,你可以说if(dateRange.indexOf(jsonArray[i].date)==-1)
“我也有一个json数组”-不,你有一个对象数组;这个问题中没有json。无论如何,我不理解你关于indexOf()
为什么不起作用的说明,因为.indexOf()
不会将“2017-08-23”与“2017-08-21”匹配-你能用你的问题来展示你尝试过的代码吗?@nnnnnn问题是如果indexOf()
会失败,因为将2017-08-23
与2017-08-21
进行比较是错误的…我想检查数组元素是否在对象数组中的任何位置..这是否更有意义?不是真的。如果您在jsonArray
中迭代项目,并想测试当前项目的日期是否为空在另一个数组中,可以说if(dateRange.indexOf(jsonArray[i].date)=-1)
。