Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 使用map时使用spread操作符扩展数组_Javascript_Arrays_Dictionary_Spread Syntax - Fatal编程技术网

Javascript 使用map时使用spread操作符扩展数组

Javascript 使用map时使用spread操作符扩展数组,javascript,arrays,dictionary,spread-syntax,Javascript,Arrays,Dictionary,Spread Syntax,我不确定这是否是一个正确的方法,但我很好奇这是否可以做到。我有一个需要从中创建数组的对象,键是项,值id是它在数组中重复的次数 const arrayInstructions = { 'm': 5, 's': 5, 'p': 5 } 这应该使['m','m','m','m','m','s','s','s'.] 这是工作方法: var array = [] Object.keys(arrayInstructions).forEach(function (agenda) { arr

我不确定这是否是一个正确的方法,但我很好奇这是否可以做到。我有一个需要从中创建数组的对象,键是项,值id是它在数组中重复的次数

const arrayInstructions = {
  'm': 5,
  's': 5,
  'p': 5
}
这应该使
['m','m','m','m','m','s','s','s'.]

这是工作方法:

var array = []
Object.keys(arrayInstructions).forEach(function (agenda) {
  array = array.concat( _.fill(Array(arrayInstructions[agenda]), agenda) )
})
可以这样做吗:

var deck = Object.keys(streamDeck).map(function (agenda) {
  var partial = _.fill(Array(streamDeck[agenda]), agenda)
  return ...partial // I know this is wrong
})

这里没有很好的理由使用扩展操作符

在最简单的形式中,spread操作符允许您使用一个数组,其中需要多个“元素”或参数,例如

var part = [2, 3];
var arr  = [1, ...part, 4]; // [1,2,3,4]
这似乎很有用,但您正在填充数组并将它们连接在一起,使用
concat
似乎更合适,但是如果使用
apply
并返回映射,您可以将此限制为对
concat
的单个调用

“使用严格的”
常量数组指令={
“m”:5,
“s”:1,
“p”:2
}
var deck=[].concat.apply([],Object.keys(arrayInstructions).map(函数(k){
返回新数组(数组指令[k])。填充(k)
}));
//输出
document.body.innerHTML=''+JSON.stringify(deck,0,4)+''您可以使用spread on构建最终阵列:

function concatMap(array, func, thisArg) {
  return [].concat.apply([], [].map.call(array, func, thisArg));
}
concatMap(
  Object.keys(arrayInstructions),
  k => new Array(arrayInstructions[k]).fill(k)
);
const-arrayinstructs={'m':5,'s':5,'p':5};
//这是因为Array.prototype在这里的行为类似于空列表
const deck=Array.prototype.concat(
.map(数组指令,(时报,议程)=>时报(时报,议程))
);
日志(JSON.stringify(deck));
函数日志(x){document.getElementsByTagName('pre')[0].appendChild(document.createTextNode(x));}

因为JS没有
concatMap
,但您可以手动定义此功能:


不,不能。您正在寻找<代码> CopTMAP (JS没有)。考虑<代码> Obj.KEY(OBJ).Read((s,k)=s+k.Read(Obj[k]),'')。它进行无用的字符串连接,但它很短。我建议编译
[].concat(…)
though@Bergi我也在考虑这一点,不知何故,
[].concat(…x)
感觉更健壮。你知道有什么具体的情况下,
Array.prototype.concat(…x)
不起作用吗?
Array.prototype[0]=“gotcha”
将是灾难性的:-)诚然,这有点做作,但如果有人以类似的方式使用
Array.prototype.push(…)
,可能会发生这种情况