Javascript 数组对象值删除不需要的字符串
我有以下Javascript 数组对象值删除不需要的字符串,javascript,arrays,Javascript,Arrays,我有以下originaldata,我想从其中的每个对象中删除div标记,将其与标记中的内容一起作为最终结果,请参见modifieddata 使用javascript的最佳方法是什么?过滤和映射?或者别的什么 originaldata = [{ "name": "john", "content": "<div class="ExternalClass06EE5E42165840F48DFA193ACAD4F87A">aa</div>"
originaldata
,我想从其中的每个对象中删除div标记,将其与标记中的内容一起作为最终结果,请参见modifieddata
使用javascript的最佳方法是什么?过滤和映射?或者别的什么
originaldata = [{
"name": "john",
"content": "<div class="ExternalClass06EE5E42165840F48DFA193ACAD4F87A">aa</div>"
},
{
"name": "mary",
"content": "<div class="ExternalClass3D5F8061F3DE49C4BC55A9CE0ADD6F9A">asd</div>"
}
]
modifieddata = [{
"name": "john",
"content": "aa"
},
{
"name": "mary",
"content": "asd"
}
]
原始数据=[{
“姓名”:“约翰”,
“内容”:“aa”
},
{
“姓名”:“玛丽”,
“内容”:“asd”
}
]
修改数据=[{
“姓名”:“约翰”,
“内容”:“aa”
},
{
“姓名”:“玛丽”,
“内容”:“asd”
}
]
使用javascript的最佳方法是什么?过滤和映射?或者别的什么
originaldata = [{
"name": "john",
"content": "<div class="ExternalClass06EE5E42165840F48DFA193ACAD4F87A">aa</div>"
},
{
"name": "mary",
"content": "<div class="ExternalClass3D5F8061F3DE49C4BC55A9CE0ADD6F9A">asd</div>"
}
]
modifieddata = [{
"name": "john",
"content": "aa"
},
{
"name": "mary",
"content": "asd"
}
]
如果您想采用功能性方法,只需map
(复制对象),就不需要过滤
如果没有,只需修改现有对象即可:
以下是地图
版本:
var originaldata=[{
“姓名”:“约翰”,
“内容”:“aa”
},
{
“姓名”:“玛丽”,
“内容”:“asd”
}];
var temp=document.createElement(“div”);
var modifieddata=originaldata.map(条目=>{
temp.innerHTML=entry.content;
返回{
name:entry.name,
内容:temp.firstChild.firstChild.nodeValue
};
});
console.log(modifieddata)代码>首先,必须解决引号问题,不能在同一字符串中多次使用双引号:
"<div class="ExternalClass06EE5E42165840F48DFA193ACAD4F87A">aa</div>"
^___________^_____________________________________________^_________^
var originaldata=[{
“姓名”:“约翰”,
“内容”:“aa”
},
{
“姓名”:“玛丽”,
“内容”:“asd”
}
];
对于(原始数据中的var i){
var temp_div=document.createElement('div');
temp_div.innerHTML=原始数据[i]。内容;
原始数据[i].content=temp_div.textContent;
}
控制台日志(原始数据)代码>使用map
和createElement
var output = originaldata.map( function(item){
var div = document.createElement("div");
div.innerHTML = item.content;
return { name : item.name, content : div.textContent };
});
var originaldata=[{
“姓名”:“约翰”,
“内容”:“aa”
},
{
“姓名”:“玛丽”,
“内容”:“asd”
}];
var输出=originaldata.map(函数(项){
var div=document.createElement(“div”);
div.innerHTML=item.content;
返回{name:item.name,content:div.textContent};
});
控制台日志(输出)代码>我将使用和regexp:
const originaldata = [{
"name": "john",
"content": '<div class="ExternalClass06EE5E42165840F48DFA193ACAD4F87A">aa</div>'
},
{
"name": "mary",
"content": '<div class="ExternalClass3D5F8061F3DE49C4BC55A9CE0ADD6F9A">asd</div>'
}];
const regex = /(<([^>]+)>)/ig;
const modifieddata = originaldata.map(item => ({
name: item.name,
content: item.content.replace(regex, "")
}));
console.log(modifieddata); // [{name: "john", content: "aa"}, {name: "mary", content: "asd"}]
const originaldata=[{
“姓名”:“约翰”,
“内容”:“aa”
},
{
“姓名”:“玛丽”,
“内容”:“asd”
}];
常量正则表达式=/(]+)>)/ig;
常量modifieddata=originaldata.map(项=>({
名称:item.name,
内容:item.content.replace(regex,“”)
}));
console.log(modifieddata);//[{姓名:“约翰”,内容:“aa”},{姓名:“玛丽”,内容:“asd”}]
UPD。如果内容的结构可能比一个标记包装更复杂,那么您应该考虑使用另一种方法(例如和)。您可以创建一个新元素,然后将originaldata
数组的内容插入到新创建的元素中
稍后,使用innerHTML
检索元素的html,并使用innerHTML
工作演示
var originaldata=[{
“姓名”:“约翰”,
“内容”:“aa”
},
{
“姓名”:“玛丽”,
“内容”:“asd”
}
];
对于(原始数据中的var i){
var html=originaldata[i]。内容;
var temp=document.createElement('div');
temp.innerHTML=html;
var htmlContent=temp.firstChild.innerHTML;
原始数据[i]。内容=htmlContent;
}
console.log(originaldata)
这里有一行代码(假设div标记中只有字母)
originaldata.forEach(x=>{x.content=x.content.match(/>)(\w+?)(\w+?)格式中有错误。字符串应为'aa'
或“aa”@gurvinder372:反正不是JSON。但是,是的,它仍然无效。@T.J.Crowder你是说接受的答案不正确?还是不是解决问题的正确方法?@DamienFlood:这是使用正则表达式解析HTML,这不是一个好主意。如果你想采用函数方法(创建新对象),剩下的部分就可以了@T.J.Crowder如果DIV中有其他HTML标记,这也会被删除。理想情况下,我想保留DIV中的所有内容,即使它有其他标记。这也是可能的吗?非常确定他们不想要内容中的“0”和“1”
(他们说他们想要“aa”
和“asd”
)“没有任何意义&也只是用作示例”这将是一个非常具体的“无意义的示例”,他想删除
标记并提取它们的文本(存储在内容
)。您的答案中缺少该步骤。-)我在需求中没有看到任何HTML))PS喜欢那篇文章!你在回答中使用正则表达式来解析HTML。强烈建议不要这样做。@T.J.Crowder那么你将遵循什么方法?如果是单标记包装,我想这是合适的解决方案。但我同意,一般来说,这个过程应该是另一个。我更新了答案。当你e A)不从回调返回任何内容,B)不使用返回值。当然,。你是对的。我不应该使用map。将其更改为forEach。A)这不是一个纯函数。我在这里没有遵循函数方法。那么为什么我是否从函数返回一些内容很重要?使用时很重要map
。现在不使用map
,这无关紧要。HTML问题仍然存在,而且这个答案实际上只是在任何情况下重复以前的答案。
const originaldata = [{
"name": "john",
"content": '<div class="ExternalClass06EE5E42165840F48DFA193ACAD4F87A">aa</div>'
},
{
"name": "mary",
"content": '<div class="ExternalClass3D5F8061F3DE49C4BC55A9CE0ADD6F9A">asd</div>'
}];
const regex = /(<([^>]+)>)/ig;
const modifieddata = originaldata.map(item => ({
name: item.name,
content: item.content.replace(regex, "")
}));
console.log(modifieddata); // [{name: "john", content: "aa"}, {name: "mary", content: "asd"}]
originaldata.forEach( x => { x.content = x.content.match(/>(\w+?)</)[1] })