如何获取与另一个数组不匹配的数组中的第一项

时间:2016-06-09 08:32:50

标签: javascript jquery

我正在构建一个首选项列表,用户从列表中选择多个项目,然后按优先顺序将它们呈现给他们。

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

行为将是:

  • 首先,用户会看到“选择您的第一个偏好”
  • 当他们选择第一个偏好时,然后更改为“选择您的第二个偏好,依此类推。”
  • 还需要知道他们是否取消选择偏好,并且这样做需要再次说“选择你的第一个偏好(或任何偏好)”。

我创建了一个JSfiddle here

我想能够以某种方式使用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);

所以基本上我只需要一种方法来找到不在此列表中的第一个偏好,如果这有意义的话...... updated fiddle

2 个答案:

答案 0 :(得分:0)

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

显示的文字为preferencesAsText[schemePrefArray.length]

没有

答案 1 :(得分:0)

好的,所以我想我已经把它想出来了。如果您创建所选首选项的数组,然后使用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]);
  }

更新的小提琴here