javascript-如何编写一个接受字符串和对象并在字符串中插入该对象的函数?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-如何编写一个接受字符串和对象并在字符串中插入该对象的函数?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2578字,纯文字阅读大概需要4分钟。
内容图文
![javascript-如何编写一个接受字符串和对象并在字符串中插入该对象的函数?](/upload/InfoBanner/zyjiaocheng/683/c5c271459d8e4797b8771a285a58cf4e.jpg)
大家好,我需要编写一个函数,该函数接受一个字符串和一个对象,并将该对象内插到字符串中,这样的事情
// interpolate("Its {weather} outside", {weather: 'damn Hot'})
// returns 'It's damn hot outside'
// interpolate( "Hi my name is {name}", {name: 'John'});
// returns 'Hi my name is John'
无论物体走到多深,都应该是这样
// interpolate("Hi my name is {contact.name}", {contact: {name: 'john'}});
我有点卡住了,起初我尝试将字符串拆分成一个数组,然后尝试将对象值放入数组中,然后将其重新连接在一起,但不适用于所有测试用例,有人可以帮我编写此函数并解释一下吗他们的解决方案好吗?谢谢
所以我尝试了类似的方法,但并不是真正适用于所有测试用例,这是一个模板文字,但是该函数应该只靠自己提供这些值作为参数,否则我就很困惑. .
function interpolate(strings, ...keys) {
return (function(...values) {
var dict = values[values.length - 1] || {};
var result = [strings[0]];
keys.forEach(function(key, i) {
var value = Number.isInteger(key) ? values[key] : dict[key];
result.push(value, strings[i + 1]);
});
return result.join('');
});
}
var t1Closure = interpolate`${0}${1}${0}!`;
t1Closure('Y', 'A'); // "YAY!"
var t2Closure = interpolate`${0} ${'foo'}!`;
console.log(t2Closure('Hello', {foo: 'World'})); // "Hello World!"
好的,我越来越近了,所以我将问题分为两个功能,需要将它们组合在一起,唯一的是我不确定如何在没有模板文字的情况下使最后一个用例工作
var something = "something";
var sub = function(str) {
return str.replace(/#\{(.*?)\}/g,
function(whole, expr) {
return eval(expr)
})
}
console.log(sub("hello #{something}"));
var objectValue = function(str, obj){
for(key in obj) {
if(obj.hasOwnProperty(key)) {
var value = obj[key];
return str + value;
}
}
}
console.log(objectValue("hi my name is ", {contact: {name: 'john'}}));
解决方法:
使用可怕的评估
如果您控制传递的字符串并认为它是安全的,则可以使用eval:
function interpolate (str, obj) {
return str.replace(/\{(.*?)\}/g, function (_, ref) {
return eval('obj.' + ref);
});
}
var output = interpolate("Its {weather} outside", {weather: 'damn Hot'});
console.log(output);
output = interpolate("Hi my name is {contact.name}", {contact: {name: 'john'}});
console.log(output);
output = interpolate("The highest bid is {rank[0].bid}", {rank: [{bid: 900}, {bid:600}]});
console.log(output);
请注意,如果给定类似'{x; alert(“ hi”)}’的字符串,则上述函数将执行该警报或放置的任何代码.因此,如果用户提供(或可以更改)字符串,则这不是一个好的解决方案.
模板文字
它不遵循您的函数描述符,但是template literals已经提供了您正在寻找的功能:
var weather = 'damn Hot';
var output = `It's ${weather} outside`;
console.log(output);
var contact = {name: 'john'};
var output = `Hi my name is ${contact.name}`;
console.log(output);
内容总结
以上是互联网集市为您收集整理的javascript-如何编写一个接受字符串和对象并在字符串中插入该对象的函数?全部内容,希望文章能够帮你解决javascript-如何编写一个接受字符串和对象并在字符串中插入该对象的函数?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。