gpt4 book ai didi

javascript - 在 javascript 或 php 中创建重复数组的最有效(紧凑)方式?

转载 作者:行者123 更新时间:2023-11-30 16:38:06 26 4
gpt4 key购买 nike

假设我需要一个包含许多重复元素的数组,如下所示:

[3,3,3,3,3,8,8,8,8,5,5,5,5,5,5](所以这是五个 3,四个 8,和六个 5)

在 python 中,你可以像这样非常优雅地定义它:

[3]*5+[8]*4+[5]*6

JS或PHP有类似的构造吗?

在这个例子中,显式定义整个数组并不是什么大问题。但是如果有很多元素,有很多重复,这会变得非常乏味(更不用说容易了)。我希望我的代码大小保持相等,无论数组有 5 个 3 还是 500。

在JS中,我能想到的最短的是:

var a = [];
[[3,5],[8,4],[5,6]].forEach(function(x){while(x[1]--)a.push(x[0])});

在 PHP 中类似:

foreach(array(3=>5,8=>4,5=>6) as $d=>$n) while($n--) $a[]=$d;

显然,这并没有为可读性加分。有没有更好的方法(最好是某种语言结构)来做到这一点?

最佳答案

JavaScript

可读性和可重用性的最佳方法可能是为数组“乘法”定义一个函数,例如这个以指数方式进行

function arrMultiply(arr, i) {
var arr_out = [];
if (i & 1)
arr_out = arr_out.concat(arr);
while ((i >>>= 1) > 0) {
arr = arr.concat(arr);
if (i & 1)
arr_out = arr_out.concat(arr);
}
return arr_out;
}

现在您可以连接 “相乘”数组

arrMultiply([3], 5).concat(arrMultiply([8], 4)).concat(arrMultiply([5], 6));
// [3, 3, 3, 3, 3, 8, 8, 8, 8, 5, 5, 5, 5, 5, 5]

如果你真的想要,你可以扩展 Array原型(prototype)以包含 arrMultiply 函数,它会让你的语法更接近你已经在使用的,

Array.prototype.mul = function (i) {return arrMultiply(this, i);};

[3].mul(5).concat([8].mul(4)).concat([5].mul(6));
// [3, 3, 3, 3, 3, 8, 8, 8, 8, 5, 5, 5, 5, 5, 5]

关于javascript - 在 javascript 或 php 中创建重复数组的最有效(紧凑)方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32411763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com