首页 > 解决方案 > jQuery:比较二维数组和一维数组

问题描述

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

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

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

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

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

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

将其置于上下文中:用户可以选择多个模块,当所有选定的模块与配置的定价计划之一匹配时,将返回定价计划的名称。

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

更新:

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

页面上添加了不同的计划,如下所示:

<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在我的代码顶部声明)

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

标签: jqueryarrays

解决方案


您可以首先使用数组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)
})


推荐阅读