【问题标题】:How to replace all occurrences inside an object?如何替换对象内的所有匹配项?
【发布时间】:2021-12-11 05:07:24
【问题描述】:

我有一个这样的对象:

users = [{
  "userid": "1",
  "fornonmods": "<div id=\"user1\" data-login=\"\" data-status=\"online\" class=\"item\">",
  "formods": "<div id=\"user1\" data-login=\"\" data-status=\"online\" class=\"item\">"
}, {
  "userid": "19917",
  "fornonmods": "<div id=\"user19917\" data-login=\"kBr4pelyDy4yKVmiAAAD\" data-status=\"online\" class=\"item\">",
  "formods": "<div id=\"user19917\" data-login=\"kBr4pelyDy4yKVmiAAAD\" data-status=\"online\" class=\"item\">"
}];

我想替换所有出现的
data-login=\"kBr4pelyDy4yKVmiAAAD\" data-status=\"online\"

data-login=\"kBr4pelyDy4yKVmiAAAD\" data-status=\"gagged\"
就像我对replace() 所做的那样,但问题是它只适用于字符串,我不允许将此对象转换为字符串。
在这种情况下我该怎么办?

【问题讨论】:

  • 所以循环数组并替换字符串。 users.forEach
  • 请详细说明一下?
  • @CainNuke 您不想“替换对象中的任何位置”,而是在数组中对象的每个 .fornonmods 属性中。你知道如何迭代一个数组吗?
  • 不仅在 fornonmods 中,而且在 formods 和所有其他中,为了方便起见,我没有包括在内。
  • @CainNuke 但肯定不在用户 ID 中?因此,明确列出您要处理的属性。

标签: javascript object replace


【解决方案1】:

map 就是你要找的东西

const users = [{
  "userid": "1",
  "fornonmods": "<div id=\"user1\" data-login=\"\" data-status=\"online\" class=\"item\">",
  "formods": "<div id=\"user1\" data-login=\"\" data-status=\"online\" class=\"item\">"
}, {
  "userid": "19917",
  "fornonmods": "<div id=\"user19917\" data-login=\"kBr4pelyDy4yKVmiAAAD\" data-status=\"online\" class=\"item\">",
  "formods": "<div id=\"user19917\" data-login=\"kBr4pelyDy4yKVmiAAAD\" data-status=\"online\" class=\"item\">"
}];

const id = "kBr4pelyDy4yKVmiAAAD";

const res = users.map(x => {
   const container = {};

   container.userid = x.userid,
   container.fornonmods = x.fornonmods.replace(`data-login=\"${id}\" data-status=\"online\"`, `data-login=\"${id}\" data-status=\"gagged\"`);
   container.formods = x.formods.replace(`data-login=\"${id}\" data-status=\"online\"`, `data-login=\"${id}\" data-status=\"gagged\"`);

   return container;
});

console.log(res);

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

【讨论】:

  • 我也可以为 kBr4pelyDy4yKVmiAAAD 使用变量吗?
  • 是的,我的朋友只需使用模板文字。 string text ${yourVar} string textdeveloper.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 我用 const id (kBr4pelyDy4yKVmiAAAD) 更改了您请求的答案
  • 成功了,谢谢!
  • 不客气,我的朋友
【解决方案2】:

您需要遍历 users 并替换为 regex 模式。

const searchString = new RegExp('data-login=\"kBr4pelyDy4yKVmiAAAD\" data-status=\"online\"', 'g');
const replacement = 'data-login=\"kBr4pelyDy4yKVmiAAAD\" data-status=\"gagged\"';
const parsedUsers = users.map(x=>{
  return {
    userid: x.userid,
    fornonmods: x.fornonmods.replace(searchString,replacement),
    formods: x.formods.replace(searchString,replacement)
 }
})

【讨论】:

  • 很好,但我可以使用变量代替 kBr4pelyDy4yKVmiAAAD 吗?
  • 当然,只要使用字符串连接即可。 const searchString = new RegExp(data-.... ${变量}..., 'g')°
  • 谢谢,这很有帮助。
猜你喜欢
  • 2012-05-18
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
  • 2021-09-29
相关资源
最近更新 更多