使用数组索引搜索字符串字母

时间:2015-08-10 14:32:54

标签: javascript arrays string foreach

我今天得到了这个小谜题来解决:

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。

干杯

4 个答案:

答案 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));