【问题标题】:Cannot read property 'slice' of undefined in jQuery无法读取 jQuery 中未定义的属性“切片”
【发布时间】:2019-12-26 10:26:06
【问题描述】:

我在$.each() 数组中使用slice() 函数。当数组值的前半部分具有相同的字符串时,它会显示此错误。 $name 来自一个始终具有不同值的按钮,即 question1question2

当数组类似于var arr = ["question1Answer1", "question2Answer2"]; 时,我尝试过,然后函数可以正常工作,但是当我推送更多以question2 开头的值并想要删除这些值时,控制台中显示的上述错误。

    var arr = ["question1Answer1", "question2Answer2", "question2Answer3"];
    refreshArrange = function($name) {

      $.each(arr, function(index, value) {
        var newStr = '';

        newStr = value.slice(0, 9);

        if(newStr == $name) {
          var ind = arr.indexOf(value);
          if (ind > -1) {
            arr.splice(ind, 1);
            console.log('working Ok');
          }

        }else {

        }

      });

      console.log(arr);
    }

我想删除数组的第二个和第三个值,因为$name 的未来值是question2。我正在拆分数组值并将前半部分与$name 进行比较并将其删除。但是会出现这个错误。 不知道问题出在哪里。

实际上,我想删除从$name的值开始的数组的值

如果这是一个愚蠢的问题,我很抱歉。我知道我没有正确解释问题。

【问题讨论】:

  • 我找不到一个你在这里使用 jQuery 而不是 vanilla Javascript 的原因。
  • 使用 jQuery 时,您可以通过索引对象来访问 vanilla HtmlElements:arr[0]
  • @efkah 他没有使用 jQuery 来选择任何元素。就像完全不必要的额外复杂层一样。
  • 您可能还想在函数中使用 $name:` $.each($name, function(index, value) { ...` . @connexo 我同意。
  • @afnan 您传递的 arr$name 都相同。为什么 ?我认为$name 不应该是一个数组。

标签: javascript jquery slice each


【解决方案1】:

因为你在使用each这个数组arr.splice(ind, 1);时拼接了一个数组

你可以试试我的代码:

var arr = ["question1Answer1", "question2Answer2", "question2Answer3"];
var refreshArrange = function($name) {
  var result = [];
  $.each(arr, function(index, value) {
    // var newStr2 = '';

    var newStr = value.slice(0, 9);
    // newStr2 = value.slice(0, 10);

    if(newStr == $name) {

    }else {
      result.push(value)
    }

  });

  console.log(result);
}

refreshArrange('question2');

那么result变量就是你期望的结果

【讨论】:

  • 这是一个有效的小提琴......对于每个答案都有刷新按钮,当您单击两次答案然后刷新它时,它将在控制台中显示切片错误。为什么 ? jsfiddle.net/afnan03/gsj9kych
猜你喜欢
  • 1970-01-01
  • 2020-06-27
  • 1970-01-01
  • 2016-02-08
  • 2019-06-14
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 2017-06-17
相关资源
最近更新 更多