You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断jQuery数组含特定值?data_d数组时间存在性检测问题

判断数组中是否存在特定时间值的解决方案

嘿,我来帮你搞定这个问题!你之前用data_d.indexOf(time)一直返回false的核心原因很简单:你的data_d数组里的每个元素都是数组配对(比如[timestamp, v.kreditbetrag]或者[time, 0]),而indexOf是严格匹配整个数组元素的——你拿单个time值去搜索,当然找不到完全匹配的元素,所以alert才会一直显示false。

下面给你几种实用的解决方法,结合你的代码场景来写:

方法1:用jQuery的$.grep()过滤数组

这是jQuery里专门用来筛选数组的方法,很适合你的场景:

$.each(date_range, function(kr, time) {
  alert('time' + '=>' + time);
  
  // 判断time是否存在于data_d的第一个元素位置
  var isExist = $.grep(data_d, function(item) {
    // item[0]就是数组配对里的时间值,和当前time做严格匹配
    return item[0] === time;
  }).length > 0;
  
  alert(isExist); // 现在会正确显示true/false
  
  // 你的原有逻辑
  if (time == timestamp) {
    data_d.push([timestamp, v.kreditbetrag]);
  } else {
    data_d.push([time, 0]);
  }
});

方法2:用原生JS的some()方法(更简洁)

如果你的环境支持ES6+,原生的some()方法会更高效,它只要找到第一个匹配的元素就会停止遍历:

$.each(date_range, function(kr, time) {
  alert('time' + '=>' + time);
  
  var isExist = data_d.some(function(item) {
    return item[0] === time;
  });
  
  alert(isExist);
  
  // 原有逻辑不变
  if (time == timestamp) {
    data_d.push([timestamp, v.kreditbetrag]);
  } else {
    data_d.push([time, 0]);
  }
});

方法3:针对你给出的对象结构的扩展

你还提到了一个对象示例obj = {0:{kreditbetrag:1300,datum:'2018-03-30'},1:{kreditbetrag:2600,datum:'2018-03-31'}},如果要判断某个time是否存在于这个对象的datum属性里,可以这样写:

// 先把对象的值转成数组,再用some判断
var isExist = Object.values(obj).some(function(item) {
  return item.datum === time;
});
alert(isExist);

小提醒

如果你的需求是避免向data_d中重复添加相同time的元素,可以在push前加上判断,比如:

if (time == timestamp) {
  // 先判断是否已存在,不存在再添加
  if (!isExist) {
    data_d.push([timestamp, v.kreditbetrag]);
  }
} else {
  if (!isExist) {
    data_d.push([time, 0]);
  }
}

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:13:33