基本上当zipWithIndex应用于数组时,它应该生成另一个数组,其键值为value,值为数组元素(反之亦然)。
答案 0 :(得分:1)
<强>更新强>
根据OP的注释,返回值应该是一个对象数组,每个对象都包含一个属性,它是输入数组/对象的反转属性(即键和值交换位置)。
function invert(list) {
return _.map(list, function(val, key) {
var obj = {};
obj[val] = key;
return obj;
});
}
示例1:['a', 'b', 'c'] ==> [{a:0}, {b:1}, {c:2}]
示例2:{key1:'a', key2:'b'} ==> [{a:'key1'}, {b:'key2'}]
function invert(list) {
return _.map(list, function(val, key) {
var obj = {};
obj[val] = key;
return obj;
});
}
function doAlert(input) {
alert (JSON.stringify(input) + ' ==> ' + JSON.stringify(invert(input)));
}
doAlert(['a', 'b', 'c']);
doAlert({key1: 'a', key2: 'b'});
<script src="http://underscorejs.org/underscore-min.js"></script>
与Underscore.JS中的_.invert
函数一样,值必须是可序列化的(即可转换为字符串),以便具有可预测的行为。
原始回答
考虑:
function zipWithIndex(list) {
return _.map(list, function(val, key) { return [val, key]; });
}
这实际上应该适用于两个对象和数组(任何可以迭代的东西,就_.map
而言)。
zipWithIndex
的实现基于Scala's implementation(我定义的唯一广泛使用的语言)。
function zipWithIndex(list) {
return _.map(list, function(val, key) { return [val, key]; });
}
function doAlert(input) {
alert (JSON.stringify(input) + ' ==> ' + JSON.stringify(zipWithIndex(input)));
}
doAlert(['a', 'b', 'c']);
doAlert({key1: 'a', key2: 'b'});
<script src="http://underscorejs.org/underscore-min.js"></script>