首页 > 解决方案 > 我们可以在多维数组中使用递归来推送新值吗

问题描述

container如果水果容器<我们想要的目标,如何在每个数组中推送新值,

例子:

- we should push new fruits in those 2d arrays:
 - List item
 - the  maximun "apple" in container must has 3 fruits,
more than it, we should push to new array/index  in next 2d array container
 - the  maximun "mango" in container must has 2 fruits,
more than it, we should push to new array/index in next 2d array container
 - the  maximun "stawberry" in container must has 4 next fruits,
more than it, we should push to new array/index in next 2d array container

const stawberry = x => {
     return x.filter(el => el === "stawberry").length;
  }

const apple = x => {
     return x.filter(el => el === "apple").length;
  }

const mango = x => {
     return x.filter(el => el === "mango").length;
  }

const fruits = kindOfFruits => {

  if(kindOfFruits.length === 0){
    return [];
  } else if(stawberry(kindOfFruits[0]) === 0 ){
    kindOfFruits[0].push("NEW STAWBERRY");
  }
  return kindOfFruits.concat((fruits(kindOfFruits.slice(1))));
}

const container = [
  ["apple", "apple", "banana", "mango", "stawberry", "banana", "banana"],
  ["banana", "mango", "stawberry", "stawberry"],
  ["apple", "mango", "mango"]
];

console.log(fruits(container));

我想要这样的结果:

[
  ["apple", "apple", "banana", "mango", "stawberry", "banana", "banana", "apple", "mango", "stawberry ", "stawberry", "stawberry"],
  ["banana", "mango", "stawberry", "stawberry", "apple", "apple" , "stawberry"],
  ["apple", "mango", "mango"]
];

注意:如果我们推的时候水果没有分类,这并不重要,只要容器中的水果和我们想推的一样:D,

数据容器已经制作好了,我们只需要在每个容器中放入水果 2d 数组,就像我上面说的规则一样

我希望我的问题是有道理的,如果没有,对不起

标签: javascriptarraysloopsrecursionmultidimensional-array

解决方案


我认为你的问题有很多差距,没有定义任何目标或容器中有多少种“水果”等。

正如我从您的问题中了解到的那样,您希望在目标上完全填充二维数组。所以我skecth一些代码:

    var appleTarget = 5;
    var mangoTarget = 7;
    var strawberryTarget = 12;
    var kindOfFruit = ["apple", "mango", "strawberry"];

    function fruitCount(subFruitContainer, fruit)
    {
        return subFruitContainer.filter(el => el === fruit).length;
    }

    function insertFruit(dimension , fruit)
    {
        dimension.push(fruit);
    }

    function stableContainer(fruitContainer)
    {
        var selectedTarget;
        kindOfFruit.forEach(function(fruitKind) {
            fruitContainer.forEach(function(dimension){
                if(fruitKind == "apple") selectedTarget = appleTarget;
                else if(fruitKind == "mango") selectedTarget = mangoTarget;
                else if(fruitKind == "strawberry")  selectedTarget = strawberryTarget;
                else selectedTarget = 0;
                var fruitKindCount = fruitCount(dimension, fruitKind);
                if(fruitKindCount < selectedTarget) 
                {
                    for(var i = selectedTarget-fruitKindCount; i > 0; i--) 
                    {
                        insertFruit(dimension, fruitKind);
                    }
                }
            });
        });

        console.log("stabled container");
        console.log(fruitContainer);
    }

    var container = [
        ["apple", "apple", "banana", "mango", "stawberry", "banana", "banana"],
        ["banana", "mango", "stawberry", "stawberry"],
        ["apple", "mango", "mango"]
    ];

    stableContainer(container);

推荐阅读