Javascript,重复一个对象键N次,是N个它的值
Javascript, repeating an object key N-times, being N its value
本文关键字:一个对象 Javascript 更新时间:2023-09-26
我想知道如何以更干净和最佳的方式做到这一点:
我有一个具有以下结构的对象:
{
"125": 2,
"439": 3,
"560": 1,
"999": 2,
...
}
我想创建一个平面数组,重复每个键,其值指示的次数。以及将键(字符串)转换为整数的奖励积分。在此示例中,生成的数组应为:
[ 125, 125, 439, 439, 439, 560, 999, 999 ]
我已经尝试了几种方法,但它们看起来都过度设计。当然,有一种更简单的方法。这就是我得到的下划线(它返回一个字符串数组,也不是整数):
_.compact(_.flatten(_.map(files, function(num, id) {
return new Array(num+1).join('$'+id).split('$')
})))
我知道有很多方法可以做到这一点。我只想要一种干净快捷的方法。作为 Ruby 开发人员,它可以像以下一样简单:
> files = {"125" => 2, "439" => 3, "560" => 1, "999" => 2}
=> {"125"=>2, "439"=>3, "560"=>1, "999"=>2}
> files.map {|key, value| [key.to_i] * value}.flatten
=> [125, 125, 439, 439, 439, 560, 999, 999]
提前谢谢。
试试这个:
var obj = {
"125": 2,
"439": 3,
"560": 1,
"999": 2
}
var arr = [];
for (prop in obj) {
for (var i = 0; i < obj[prop]; i++)
arr.push(parseInt(prop));
}
console.log(arr)
我知道
这是普通的JavaScript,但对我来说似乎比你发布的代码更干净:
var dict = {
"125": 2,
"439": 3,
"560": 1,
"999": 2
}
var result = [];
for(key in dict)
for(i = 0; i < dict[key]; i++)
result.push(key * 1);
alert(result);
嗯... 不确定我是否得到了,但也许是这样的:
var myObj = {
"125": 2,
"439": 3,
"560": 1,
"999": 2
},
myArray = [];
for(k in myObj){
for(i = 0; i < myObj[k]; i++){
myArray.push(k);
}
}
console.log(myArray)
上面其他答案的问题在于 for..在 JavaScript 中的语言构造将涉及对象原型链中的所有键。在这种情况下,我们应该检查并仅添加正确的键。
var obj= {
"125": 2,
"439": 3,
"560": 1,
"999": 2
}
var arr=[];
for (var item in map) {
//important check!
if (map.hasOwnProperty(item)) {
arr.push(item);
}
}
另请参阅:http://www.yuiblog.com/blog/2006/09/26/for-in-intrigue/
这些方法中的任何一种是否更干净是相当主观的:
// some helper function for creating an array with repeated values
function repeat(val, times) {
var arr = [];
for(var i = 0; i < times; i = arr.push(val));
return arr;
}
function convert(obj) {
var result = [], key;
for(key in obj) {
result = result.concat(repeat(+key, obj[key]));
}
return result;
}
或者一种更实用的方法:
Object.keys(obj).reduce(function(result, key) {
return result.concat(repeat(+key, obj[key]));
}, []);
// with underscore.js
_.reduce(_.keys(obj), function(result, key) {
return result.concat(repeat(+key, obj[key]));
}, []);
一个辅助函数:
function flatten(obj){
//static Array method: create array (a elements, value b)
Array.aXb = Array.aXb || function(a,b){
b = b || 0;
return String(this(a)).split(',').map(function(){return b;});
}
//obj2array
var arr = [];
for (var k in obj)
if (+obj[k]) arr = arr.concat(Array.aXb(+obj[k],k));
return arr;
}
var obj= {"125": 2,"439": 3,
"560": 1,"999": 2 },
flatten(obj); //=> [125,125,439,439,439,560,999,999]
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- javascript处理一个对象数组以获得一个新的对象数组
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 将javascript对象(属性+值)合并到一个对象中
- 从 javascript 中的对象方法返回一个对象
- 用javascript创建另一个对象的实例
- 从javascript函数返回一个对象
- 为什么在Javascript中将一个对象分配给另一个变量也会更改初始对象
- 是否可以创建一个对象,该对象是另一个对象的子集,而不会丢失javascript中的引用
- 当一个对象与javascript画布中的另一个对象发生冲突时,如何停止该对象
- JavaScript:如何将“.bind()”“函数”到另一个对象
- Javascript,重复一个对象键N次,是N个它的值
- JavaScript:为什么 array.push() 附加两个对象而不是一个对象
- 通过另一个对象上的字符串值为 javascript 对象属性赋值
- 引用另一个对象javascript中的对象
- 如何删除上一页 .上一个对象?Javascript .prev().remove();.
- 访问数组中的对象,该对象是另一个对象Javascript的属性
- 使对象中的对象成为一个对象javascript
- 附加到一个对象- javascript
- 将一个对象分配给另一个对象 Javascript