Javascript 如何获取数组中不包含';不匹配另一个数组

Javascript 如何获取数组中不包含';不匹配另一个数组,javascript,jquery,Javascript,Jquery,我正在构建一个首选项列表,用户从列表中选择一些项,然后按照首选项的顺序返回给他们 我已经建立了一个原型,但我需要一些帮助,我想添加一个功能。我希望用户看到他们选择的下一个项目的首选项是什么 这种行为将是: 首先,向用户显示“选择您的第一个首选项” 当他们选择他们的第一个首选项时,这将更改为“选择你的第二个首选项,依此类推” 它还需要知道他们是否取消了一个偏好,这样做时,它需要再次说“选择你的第一个偏好(或任何偏好)” 我已经创建了一个JSFIDLE 我在想象能用grep来做这个 var n

我正在构建一个首选项列表,用户从列表中选择一些项,然后按照首选项的顺序返回给他们

我已经建立了一个原型,但我需要一些帮助,我想添加一个功能。我希望用户看到他们选择的下一个项目的首选项是什么

这种行为将是:

  • 首先,向用户显示“选择您的第一个首选项”
  • 当他们选择他们的第一个首选项时,这将更改为“选择你的第二个首选项,依此类推”
  • 它还需要知道他们是否取消了一个偏好,这样做时,它需要再次说“选择你的第一个偏好(或任何偏好)”
我已经创建了一个JSFIDLE

我在想象能用grep来做这个

 var nextPreference = $.grep(preferencesAsText, function(v) {
      // return v !== First preference that isn't one of the preferences that are already selected
  });
任何帮助都会很好,谢谢

编辑:通过执行以下操作,我已成功获取所选首选项列表中的项目数组:

var chosenPreferences = $('[data-schemeorder]').map(function() {
                        return $( this ).text();
                      })
                      .get();

  var arrayOfChosen = $.makeArray(chosenPreferences);

  console.log(arrayOfChosen);

因此,基本上我只需要一种方法来查找此列表中没有的第一个首选项,如果这有意义的话…

为什么不使用
schemePrefArray.length
来获得所选元素的数量并显示所需的文本

显示的文本将是
preferencesAsText[schemePrefArray.length]


否?

为什么不使用
schemePrefArray.length
获取所选元素的数量并显示所需的文本

显示的文本将是
preferencesAsText[schemePrefArray.length]


否?

好的,我想我已经解决了这个问题。如果您创建了一个所选首选项的数组,然后使用grep创建了一个不在首选项文本中的项目数组,那么您可以使用它来查找第一个未选项

var chosenPreferences = $('[data-schemeorder]').map(function() {
                        return $( this ).text();
                      })
                      .get();

  var arrayOfChosen = $.makeArray(chosenPreferences);
  var differenceArray = [],
      initialVal = 0;


  $.grep(preferencesAsText, function(el) {
    if($.inArray(el, arrayOfChosen) == -1) differenceArray.push(el);

    initialVal++;
  })

  if(differenceArray[0] === undefined) {
     $('#chosenLimit').show();
     $('#chooseYourPrefs').hide();
  } else {
    $('#chosenLimit').hide();
     $('#chooseYourPrefs').show();
     $('#chooseNextPreference').text(differenceArray[0]);
  }

和一个更新的fiddle

好的,我想我已经解决了这个问题。如果您创建了一个所选首选项的数组,然后使用grep创建了一个不在首选项文本中的项目数组,那么您可以使用它来查找第一个未选择的项目

var chosenPreferences = $('[data-schemeorder]').map(function() {
                        return $( this ).text();
                      })
                      .get();

  var arrayOfChosen = $.makeArray(chosenPreferences);
  var differenceArray = [],
      initialVal = 0;


  $.grep(preferencesAsText, function(el) {
    if($.inArray(el, arrayOfChosen) == -1) differenceArray.push(el);

    initialVal++;
  })

  if(differenceArray[0] === undefined) {
     $('#chosenLimit').show();
     $('#chooseYourPrefs').hide();
  } else {
    $('#chosenLimit').hide();
     $('#chooseYourPrefs').show();
     $('#chooseNextPreference').text(differenceArray[0]);
  }

更新的fiddle

问题在于,如果您取消选择第一个首选项或任何不按顺序的内容,那么它将显示错误的文本。问题在于,如果您取消选择第一个首选项或任何不按顺序的内容,那么它将显示错误的文本。