我今天得到了这个小谜题来解决:
var str = "hzuelgdlbo";
var arr = [0, 3, 4, 7, 9];
console.log(res); => "hello"
我用简单的 forEach 解决了这个问题,我现在问我是否有更简单的解决方案(自定义排序)。
forEach:
idz.forEach(function(idx){
var res = [];
res.push(str[idx]);
console.log(res.join(''));
});
一种解决方案可能是循环遍历数组并对字符串执行substr。
干杯
答案 0 :(得分:3)
如何使用reduce
[0, 3, 4, 7, 9].reduce(function(p, c) { return p + "hzuelgdlbo"[c] }, '')
或类似的使用map
[0, 3, 4, 7, 9].map(function(i) { return "hzuelgdlbo"[i] }).join('');
您可以将两者都包装在console.log / alert中以输出值。
答案 1 :(得分:1)
此解决方案创建字母数组,并在最后将它们转换为字符串。它也可以在不使用外部变量的情况下返回结果:
arr.reduce(function (word, letterIndex) {
word.push(str[letterIndex]);
return word;
}, []).join('');
答案 2 :(得分:1)
您可以filter
字符串中的元素(您首先转换为数组):
var str = "hzuelgdlbo".split('').filter(function(el, i, a) {
if (arr.indexOf(i) > -1) return el;
}).join('');
答案 3 :(得分:1)
使用地图http://jsfiddle.net/mig1098/zx1w9hdw/:
var str = "hzuelgdlbo";
var numbers = [0, 3, 4, 7, 9];
mapp = function(_array,_str){
return (_array.map(function(n){ return _str[n]; })).join('');
};
console.log(mapp(numbers,str));