【问题标题】:jQuery: Compare 2D array with 1D arrayjQuery:比较二维数组和一维数组
【发布时间】:2021-11-24 23:39:33
【问题描述】:

假设我的代码中有 2 个 javascript/jQuery 数组。

一个看起来像这样的二维数组(控制台输出):

0: {title: 'Freemium', modules: 'Ordering'}
1: {title: 'Standaard', modules: 'Ordering,Invoicing,Cash system'}

一个是标准的一维数组,看起来像这样(控制台输出):

['Ordering', 'Invoicing', 'Cash system']

我想比较两个数组以检查第二个数组是否与第一个数组匹配。如果是,则需要返回第一个数组的标题列。

具体来说:用户可以选择多个模块,当所有选定的模块与配置的定价计划之一匹配时,返回定价计划的名称。

我该怎么办?我的代码中已经准备好两个数组,我只需要找到一种方法来比较它们并返回第一个数组的标题列。我找到了一些比较两个数组的解决方案,但从来没有一个二维数组和一维数组。

更新:

所以我的问题可能措辞不当或技术上不正确。

页面上添加不同的计划如下:

<div id="packages">
    <div class="package" data-title="Freemium" data-modules="Ordering"></div>
    <div class="package" data-title="Standaard" data-modules="Ordering,Invoicing,Cash system"></div>
</div>

我正在使用以下 JS 代码将包“添加”到我的代码中:

$("#packages .package").each(function(index) {
   var package_title = $(this).data('title');
   var package_modules = $(this).data('modules');
   packages_array.push({"title": package_title, "modules": package_modules});
});

每个由用户选择的模块都被添加到这样的数组中:

$(".modules .module.active").each(function() {    
   modules_array.push($(this).data('title'));
});

(数组packages_arraymodules_array 在我的代码顶部声明)

这就是我现在所拥有的,如果有人能指出我如何改进我的代码以及如何比较两个数组的正确方向..

【问题讨论】:

  • 这与jQuery无关。如果你真的想比较 jQuery 对象,这将是一个完全不同的问题和答案。
  • 到目前为止,您尝试了哪些方法来自行解决此问题?为什么modules 是字符串而不是数组?
  • 为什么是 2D?您的问题中没有二维数组。
  • 您好安德烈亚斯,感谢您的意见。一般来说,我对 jQuery 和 javascript 没有那么丰富的经验,所以如果我的问题措辞不正确,我深表歉意。我刚刚更新了我的问题,以提供有关我其余代码的更多上下文。

标签: jquery arrays


【解决方案1】:

您可以首先使用数组join() 函数,将您的选择器转换为逗号分隔的字符串,它们在您的二维数组中使用forEach() 函数并将每个模块与您的新字符串值进行比较

编辑:要考虑未排序的数组,您可以先使用 sort() 对选择器数组进行排序,然后使用 split(',') 拆分模块,排序结果数组,然后 join() 它,产生两个可以比较的排序字符串

let objectArray = [{
    title: 'Freemium',
    modules: 'Ordering'
  },
  {
    title: 'Standaard',
    modules: 'Ordering,Invoicing,Cash system'
  }
]

let selectorsArray = ["Ordering", "Invoicing", "Cash system"]

let selectorsString = selectorsArray.sort().join()

objectArray.forEach((plan) => {
  let sortedModules = plan.modules.split(",").sort().join()
  if (sortedModules === selectorsString) console.log("found: " + plan.title)
})

【讨论】:

  • 顺序不一样不行
  • 非常感谢,这段代码帮助我找到了一个可行的解决方案 :)
猜你喜欢
  • 1970-01-01
  • 2013-05-19
  • 2017-07-17
  • 2021-07-22
  • 2015-02-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多