Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript数组中均匀分布元素_Javascript_Arrays - Fatal编程技术网

在javascript数组中均匀分布元素

在javascript数组中均匀分布元素,javascript,arrays,Javascript,Arrays,我有一个数组对象: var titles = { "Part 1": [ ["1", "Title 1",A], ["2", "Title 2",B], ["3",

我有一个数组对象:

var titles = {
                "Part 1":
                    [
                        ["1", "Title 1",A],
                        ["2", "Title 2",B],
                        ["3", "Title 3",C],
                        ["4", "Title 4",D],
                        ["5", "Title 5",E]
                      
                    ],
                "Part 2":
                    [
                        ["6", "Title 6", A1],
                        ["7", "Title 7", B1],
                        
                    ],

                "Part 3":
                    [
                        ["8", "Title 8", A2],
                        ["9", "Title 9", B2],
                        ["10", "Title 10", c2]
                    ]
            };
从这个对象开始,我需要构造3个数组,并将它们放在一个结果对象中。由于第1部分包含最多的值(5),因此我需要构造大小为5的数组。 如果第2部分和第3部分也包含5个值,那么这将是一个理想的场景。但有时,我确实会遇到第2部分和第3部分大小不是5的情况。在这些情况下,我需要均匀地分布值

 Part 1:
        [
            ["1", "Title 1",A],
            ["2", "Title 2",B],
            ["3", "Title 3",C],
            ["4", "Title 4",D],
            ["5", "Title 5",E]
          
        ],
Part 2:
        [

            ["6"],
            ["7",],
            ["8", "Title 6",A1],
            ["9", "Title 7",B1],
            ["10"]

        ]
    
          

and Part 3:
        [

            ["11"],
            ["12", "Title 8",A2],
            ["13", "Title 9",B2],
            ["14", "Title 10",C2],
            ["15"]
        ]

我试过以下方法:

var maxSize = 5; 

const every_nth = (arr, nth) => arr.filter((e, i) => i % nth === nth - 1);

//Suppose we already have part1Array whose size is 5

let lengthPart1Array = part1Array.length+1;
let total_no_elements_part_2= 2;

let part2Array = every_nth([1,2,3,4,5],Math.floor(maxSize/total_no_elements_part_2));

let part2TitlesArray = new Array(maxSize);

//First I construct an array with 5 values 

for(let j=0;j<part2TitlesArray.length;j++){
  part2TitlesArray[j]= [j+lengthPart1Array];
}

//Then I fill up the index obtained from every_nth
for (let i = 0; i < part2Array.length; i++) {
    insertAtIndex = part2Array[i];
    var newArray =[parseInt(lengthPart1Array+insertAtIndex-1),"Title"+insertAtIndex];
    part2TitlesArray[insertAtIndex-1]= newArray;
}


//Similar iteration for Part3Titles array as well


var result = {
                "Part1":
                    part1Array,
                "Part2":
                    part2TitlesArray,
                "Part3":
                   part3TitlesArray
};

var maxSize=5;
常数每n=(arr,n)=>arr.filter((e,i)=>i%n==n-1);
//假设我们已经有了Part1阵列,其大小为5
让长度Part1阵列=Part1阵列。长度+1;
设总元素和部分元素=2;
设part2Array=每n个([1,2,3,4,5],数学层(最大尺寸/无元素的总尺寸/part 2));
让part2TitlesArray=新数组(maxSize);
//首先,我构造了一个包含5个值的数组

对于(设j=0;j),可以通过查看数组的长度来构建新的数组

var titles={“第一部分”:[“1”、“第1篇”、“A”]、[“2”、“第2篇”、“B”]、[“3”、“第3篇”、“C”]、[“4”、“第4篇”、“D”]、[“5”、“第5篇”、“E”]、“第2部分”:[“6”、“第6篇”、“A1”]、[“7”、“第7篇”、“B1”]、“第3部分”:[“8篇”、“第8篇”、“第2篇”、“第9篇”、“第9篇”、“B2”、[“第10篇”、“第2篇”]、“c2”],
length=Math.max(…Object.values(titles.map)({length})=>length)),
结果=对象。fromEntries(对象
.参赛作品(标题)
.map([k,数组],i)=>[
K
Array.from({length},(\uj)=>{
常数
左=(i*length+j+1).toString(),
offset=Math.ceil((length-array.length)/2);
返回j=offset+array.length
?[左]
:[左,…数组[j-偏移量]。切片(1)]
})
])
);
console.log(结果);

.as console wrapper{max height:100%!important;top:0;}
对不起,您可以检查一下输入和输出的内容吗?例如,输出中的11、12、13、14、15来自何处,以及为什么“Title[number]”第3部分中的值11、12、13、14、15中似乎随机分布的是需要按顺序排列的索引。例如,第1部分数组有5个元素1..5,然后第2部分数组需要从6、7、8、9、10开始,然后第3部分数组需要从11..15开始。标题[编号]没关系。它可以是任何字符串。谢谢尼娜,我稍后会试用它并在这里发表评论。太好了,谢谢你的帮助:)嘿@Nina,可以在数组元素之间分配相等的间距吗。我将第2部分数组作为:[“6”],[“7”],[“8”,“Title ab”],[“9”,“Title cd”],[“10”]]从中间开始分配元素。我如何更改它以获得输出为[[“6”]、[“7”、“Title ab”]、[“8”]、[“9”、“Title cd”]、[“10”]。因此,如果我在第2部分数组中有3个值,那么输出将是:[[“6”、“Title ab”]、[“7”]、[“8”、“Title cd”]、[“9”]、[“10”、“Title ef”]。这是可能的,但并不容易,因为它取决于所需项目的长度和数量。