给定具有特定顺序的1xn数组,如何对随机排序的1xn数组进行排序以适合第一个数组?

时间:2018-03-23 14:43:30

标签: javascript arrays sorting

我有一个1xn大小的数组,其中顺序和索引位置很重要。可能很大n。

recipe = ['flour', 'eggs', 'apples', 'cinnamon', 'baking powder', 'sugar']

假设我有一个函数返回两个随机排列的数组。

another_recipe_values = [ 2, 4, 6 ]

其中值对应于单独的1xn数组中的以下键

another_recipe_keys = [ 'apples', 'sugar', 'eggs']

什么是优雅的方式或快速方式对两个数组进行排序以适合/匹配第一个数组中的n维?

像这样

new_recipe_values = [ 0, 6, 2, 0, 0, 4] 
new_recipe_keys = [ null, 'eggs', 'apples', null, null, 'sugar']

* update编辑了输出变量。

3 个答案:

答案 0 :(得分:2)

我会去

const recipe = ['flour', 'eggs', 'apples', 'cinnamon', 'baking powder', 'sugar']

let another_recipe_values = [ 2, 4, 6 ];
let another_recipe_keys = [ 'apples', 'sugar', 'eggs']

const indices = recipe.map(ingredient => another_recipe_keys.indexOf(ingredient));

another_recipe_values = indices.map(i => i<0 ? 0 : another_recipe_values[i]);
another_recipe_keys = indices.map(i => i<0 ? null : another_recipe_keys[i]);

更好(更快,更简单)的选项可能是

const ordered_ingredients = ['flour', 'eggs', 'apples', 'cinnamon', 'baking powder', 'sugar']
const another_recipe = {
    apples: 2,
    sugar: 4,
    eggs: 6
};
const another_recipe_values = ordered_ingredients.map(ing =>
    ing in another_recipe ? another_recipe[ing] : 0
);
const another_recipe_keys = ordered_ingredients.map(ing =>
    ing in another_recipe ? ing : null
);

您还可以从两个阵列动态构建another_recipe对象。

答案 1 :(得分:2)

只需使用map()函数,并设置null为0值的位置。

recipe.map((value, index) => recipe_values[index] != 0? value: null)

var recipe = ['flour', 'eggs', 'apples', 'cinnamon', 'baking powder', 'sugar']

var recipe_values = [ 0, 6, 2, 0, 0, 4] 

var result = recipe.map((value, index) => recipe_values[index] != 0? value: null)

console.log(result)

答案 2 :(得分:1)

只需在null中返回值为0的{​​{1}},否则将该值用作食谱的索引

&#13;
&#13;
another_recipe_values
&#13;
&#13;
&#13;