【问题标题】:Sequential array extraction to individual arrays in Javascript在Javascript中将顺序数组提取到单个数组
【发布时间】:2018-01-15 16:04:38
【问题描述】:

我有一个包含 1000 个元素的数组。但是,数组遵循一个序列 - 每十个元素。例如[水果,蔬菜,糖,面包,水果,蔬菜,糖 ....]。

我需要将每种水果、蔬菜等提取到不同的数组中,但是它们有 10 个类,我需要从这个类中制作十个不同的数组。

解决这个问题最可靠的方法是什么?

工作在 JavaScript 上

【问题讨论】:

  • 在你的1000元素数组中,你知道它们是什么类别吗?
  • 向我们展示您的阵列并向我们展示您的尝试
  • 是的,我知道其中有十个类别,它们在 100 个元素中遵循一个序列。
  • 写了数组的例子,我在只有3个类别的较小数组中取得了成功。所以 %3==0 提取第三个元素并制作一个临时数组,稍后我使用临时数组中的 %2==0 提取另一个元素
  • 您能给我一个包含 15 个元素的数组示例吗?是多维数组吗?

标签: javascript arrays indexing


【解决方案1】:

您可以获取一个包含对所需数组的引用的数组,并将其作为数组的索引,以将实际索引的剩余值和临时数组的长度相结合。

var array = ['fruit', 'vegetables', 'sugars', 'bread', 'fruit', 'vegetables', 'sugars', 'bread'],
    fruits = [],      // final arrays
    vegetables = [], //
    sugars = [],    //
    breads = [],   //
    temp = [fruits, vegetables, sugars, breads],
    len = temp.length;
    
array.forEach((v, i) => temp[i % len].push(v));
    
console.log(fruits);
console.log(vegetables);
console.log(sugars);
console.log(breads);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 它们自身不重复的元素(它们每次都不同)但它们遵循一个序列。我需要从该数组中提取 10 个不同的类别。*元素不相同*
  • 我只拿了四个,而不是那时。内容可能不同。这只是一个较小子集的示例。
  • 正如所写,这会修改 window.length 值,只是指出这一点。
【解决方案2】:

不是超级优雅,但它会完成这项工作..

var a = 
 ['bread_1','fruit_1','vegetable_1','sugars_1',
  'bread_2','fruit_2','vegetable_2','sugars_2',
  'bread_3','fruit_3','vegetable_3','sugars_3'];
  
var i=0; 
a = a.reduce(function(ac, va, id, ar){
  if(i==ac.length) i=0;
  ac[i].push(va);
  i++;
  return ac;
}, [[],[],[],[]]);

console.log(a);
  

  

【讨论】:

    【解决方案3】:

    我建议(因为模式可能会有所不同)创建一个包含类别的数组以及这些类别包含哪些元素,从而创建一个带有标识类别的键的对象。

    变量没有在对象外部“声明”,但您可以访问对象键的方式与拥有不同变量的方式相同:

    // Simple old-style catalog as reference for your elements array.
    var Categories = {
        'fruits': ['orange', 'apple', 'all other fruits…'],
        'vegetables': ['ginger', 'broccoli', 'all other vegetables…'],
        'bread': ['pizza', 'panini', 'all other breads…'],
        'sugars': ['soda', 'sugar1', '90_percent_of_products_are_sugar', 'all other sugars…']
    };
    
    // Your actual elements array.
    var ElementsArray = [
        'orange',
        'broccoli',
        'pizza',
        'sugar1',
        'apple',
        'ginger',
        'panini',
        'soda'
    ];
    
    // Your organized-by-category variable, declare as object so you can easily access as Array or Object (keys are the variable arrays).
    var OrderedElementsArray = {};
    
    for (element in ElementsArray)
    {
        for (category in Categories)
        {
            // Check if the key is not an array an initialize it for later use of push().
            if (typeof OrderedElementsArray[category] != 'object')
            {
                OrderedElementsArray[category] = [];
            }
    
            // indexOf() returns -1 if no element matches an index, thus the expression `>= 0`.
            if (Categories[category].indexOf(ElementsArray[element]) >= 0)
            {
                OrderedElementsArray[category].push(ElementsArray[element]);
            }
        }
    }
    
    // Here you can access your object variables with dot notation. All your categories will be accessible either way.
    console.log(OrderedElementsArray.fruits);
    console.log(OrderedElementsArray.vegetables);
    console.log(OrderedElementsArray.bread);
    console.log(OrderedElementsArray.sugars);
    
    // Here you can access your object variables with key notation. All your categories will be accessible either way.
    console.log(OrderedElementsArray['fruits']);
    console.log(OrderedElementsArray['vegetables']);
    console.log(OrderedElementsArray['bread']);
    console.log(OrderedElementsArray['sugars']);
    

    【讨论】:

      猜你喜欢
      • 2020-07-04
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 2016-02-08
      • 1970-01-01
      • 2019-07-14
      相关资源
      最近更新 更多