Cri*_*hai 23 javascript underscore.js
给定两个数组,一个带键,一个带值:
keys = ['foo', 'bar', 'qux']
values = ['1', '2', '3']
Run Code Online (Sandbox Code Playgroud)
如何通过仅使用underscore.js方法将它转换为对象?
{
foo: '1',
bar: '2',
qux: '3'
}
Run Code Online (Sandbox Code Playgroud)
我不是在寻找一个简单的javascript答案(像这样).
我问这是个人运动.我认为下划线有一种方法正是这样做,只是发现它没有,这让我想知道它是否可以完成.我有一个答案,但它涉及很多操作.你会怎么做?
小智 30
我知道你问过Underscore.js解决方案,但你不需要它.这是一个使用ES7对象扩展运算符和动态键的oneliner.
keys.reduce((obj, k, i) => ({...obj, [k]: values[i] }), {})
Run Code Online (Sandbox Code Playgroud)
Tud*_*rar 28
使用ES6:
let numbers = [1, 2, 3],
names = ["John", "Mike", "Colin"];
let a = Object.assign({}, ...numbers.map((n, index) => ({[n]: names[index]})))
console.log(a);
Run Code Online (Sandbox Code Playgroud)
Koo*_*Inc 14
怎么样:
keys = ['foo', 'bar', 'qux'];
values = ['1', '2', '3'];
some = {};
_.each(keys,function(k,i){some[k] = values[i];});
Run Code Online (Sandbox Code Playgroud)
完成:另一种方法可能是:
_.zip(['foo', 'bar', 'qux'],['1', '2', '3'])
.map(function(v){this[v[0]]=v[1];}, some = {});
Run Code Online (Sandbox Code Playgroud)
为了记录,没有下划线你可以扩展Array.prototype:
Array.prototype.toObj = function(values){
values = values || this.map(function(v){return true;});
var some;
this .map(function(v){return [v,this.shift()]},values)
.map(function(v){this[v[0]]=v[1];},some = {});
return some;
};
// usage
var some = ['foo', 'bar', 'qux'].toObj(['1', '2', '3']);
Run Code Online (Sandbox Code Playgroud)
Vik*_*ukh 12
你需要使用的是下划线js 的_.object方法.如果您的underscore.js版本中没有object方法,那么您必须手动将此方法添加到它.
keys = ['foo', 'bar', 'qux']
values = ['1', '2', '3']
_.object = function(list, values) {
if (list == null) return {};
var result = {};
for (var i = 0, l = list.length; i < l; i++) {
if (values) {
result[list[i]] = values[i];
} else {
result[list[i][0]] = list[i][1];
}
}
return result;
};
console.log(_.object(keys, values))Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>Run Code Online (Sandbox Code Playgroud)
鉴于这已经有4年了,Lodash或多或少取代了Underscore,我想我会用Lodash分享这个解决方案:
var keys = ['foo', 'bar', 'qux'];
var values = ['1', '2', '3'];
var obj = _.zipObject( keys, values );
Run Code Online (Sandbox Code Playgroud)
简单干净.
var toObj = (ks, vs) => ks.reduce((o,k,i)=> {o[k] = vs[i]; return o;}, {});
var keys=['one', 'two', 'three'],
values = [1, 2, 3];
var obj = toObj(keys, values);
console.log(obj);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28116 次 |
| 最近记录: |