如何在 underscore.js 中实现 `zipWithIndex`?
How would one go about implementing `zipWithIndex` in underscore.js?
本质上,当 zipWithIndex 应用于数组时,它应该生成另一个数组,其中键作为值,值作为数组元素(反之亦然)。
更新
根据 OP 的评论,return 值应该是一个对象数组,每个对象都包含一个 属性,它是一个倒置的 属性(即键和值输入 array/object.
交换位置)
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>
本质上,当 zipWithIndex 应用于数组时,它应该生成另一个数组,其中键作为值,值作为数组元素(反之亦然)。
更新
根据 OP 的评论,return 值应该是一个对象数组,每个对象都包含一个 属性,它是一个倒置的 属性(即键和值输入 array/object.
交换位置)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>