【问题标题】:Replace character in array of objects替换对象数组中的字符
【发布时间】:2021-02-04 15:55:35
【问题描述】:

我有一个对象数组,其中可能包含我希望删除的某些字符。在示例中为 £。我的数组结构如下:

const testArray = [
  { ASIN: 'ABC123', Rank: '£50', Sales: '£80' },
  { ASIN: 'ZYX123&', Rank: '£70', Sales: '£20' },
];

我想知道是否可以通过获取数组,将其拆分为字符串,使用替换然后再次将其连接起来来使用替换功能。

例如textArray.split(',').replace(/^\£/, '').join(',')

有人向我展示了这段代码,但我无法让它工作:

myArray.map(item => {
      return Object.entries(item).reduce((agg, [key, value]) => {
        agg[key] = value.replace(/^\£/, '');
        return agg;
      }, {});
    });

我的拆分成字符串并重新加入方法会起作用吗?有没有这样做的最佳实践方法?

【问题讨论】:

标签: javascript arrays


【解决方案1】:

一种选择是将对象字符串化,替换,然后解析它:

const testArray = [
  { ASIN: 'ABC123', Rank: '£50', Sales: '£80' },
  { ASIN: 'ZYX123&', Rank: '£70', Sales: '£20' },
];

const newTestArray = JSON.parse(
  JSON.stringify(testArray).replaceAll('£', '')
);
console.log(newTestArray);

还可以通过与Object.fromEntries 映射来转换对象:

const testArray = [
  { ASIN: 'ABC123', Rank: '£50', Sales: '£80' },
  { ASIN: 'ZYX123&', Rank: '£70', Sales: '£20' },
];
const newTestArray = testArray.map(
  obj => Object.fromEntries(
    Object.entries(obj)
      .map(([key, val]) => [key, val.replaceAll('£', '')])
  )
);
console.log(newTestArray);

【讨论】:

  • 我发现如果我把你上面的测试数组放入你的代码效果很好。但是当我使用我自己的数组时,我得到了这个错误:“TypeError: val.replaceAll is not a function”我无法弄清楚它为什么这样做。我正在导入文件,然后在导入的数据上运行一些代码。例如,这是我在使用您的 map 例程之前运行的最后一段代码:myArray.forEach((o, i) => (o.id = i + 1)); 任何想法可能是什么问题?
  • 如果您的环境不支持replaceAll,则为它安装一个polyfill(推荐)或使用老式的正则表达式方法。 .replace(/£/g, '')
  • 我现在收到此错误:未捕获的类型错误:val.replace 不是我在类中执行此操作的函数,如果这有什么不同的话。
  • 听起来您的值之一不是字符串。确保所有值都是字符串,或者在使用.replace之前将它们转换为字符串,或者跳过非字符串的转换,或者其他东西 - 找出你想要的逻辑。
  • 有些值不是字符串,因为它是 CSV 导入,并且 papaparse 有一个配置来指定某些字段是否应该是数字。所以也许我应该看看你的字符串化方法。
【解决方案2】:

如果您只想替换数组中对象的值中的字符,您可以尝试以下代码。它将逐个迭代数组的每个对象,获取该对象的所有键并遍历这些键以替换其值中的字符。

let keys;

testArray.map((obj)=>{

keys = Object.keys(obj);

keys.map((val)=>{

obj[val].replace(/a/g, "b");

})

})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多