首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们如何在字符串上使用Array.prototype.map?

我们如何在字符串上使用Array.prototype.map?
EN

Stack Overflow用户
提问于 2022-09-12 10:09:17
回答 2查看 73关注 0票数 -1

我知道我们不能在字符串上使用Array.prototype.map

代码语言:javascript
复制
const str = 'MY NAME IS USER';
const result = str.map(c => c); // "Uncaught TypeError: str.map is not a function"
console.log(result);

这将导致错误状态:

"Uncaught : str.map不是函数“

但是今天我遇到了一个代码片段,在这里我可以在call Array.prototype上使用strings

代码语言:javascript
复制
const str = 'MY NAME IS USER';

const x = Array.prototype.map
  .call(str, (c, i) => {
    if (str.indexOf(c, i + 1) == -1 && str.lastIndexOf(c, i - 1) == -1)
      return c;
  })
  .join('');

console.log(x);

在这个片段中,我无法了解Array.prototype.map 是如何调用 string str.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-12 10:13:35

对象方法与this一起工作。map函数的实现类似于:

代码语言:javascript
复制
function map(cb) {
    var r = [];
    for (var i = 0; i < this.length; i++) {
         r.push(cb(this[i]));
    }
    return r;
}

使用.call调用函数时,可以决定this上下文应该是什么。尽管数组方法中的this通常是一个数组,但您在这里要重写它。以及实现map的方式--它如何使用this-happens来处理数组和字符串。

票数 3
EN

Stack Overflow用户

发布于 2022-09-12 10:17:56

@deceze已经已应答你的问题了。另外,如果要对字符串“直接”使用map (或任何数组原型方法),请对其进行铺展

代码语言:javascript
复制
const str = 'MY NAME IS USER';
const x = [...str].reduce( (a, c) => a.concat(c.toLowerCase()), ``);

console.log(x);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73687621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档