一个js输出格式的奇葩需求?

下面是拿到的数据,

let data={name:'寅春树',sex:"男",age:25,address:"中国洛阳"}

下面的是需要输出的文本格式
{name},{sex}{age}

文本格式是通过接口拿到的,我现在想输出以文本格式那样的格式,也就是
寅春树,男25

我考虑用‘模板字符串’但发现不行,因为格式是接口后来拿到的,没办法直接用模板字符串,有大神有办法吗?
文本格式预先不知道,是接口拿的,这只是一个格式,也可能是其它格式,这种情况下怎么按格式输出对应的值。

阅读 1.9k
6 个回答
let data = { name: '寅春树', sex: "男", age: 25, address: "中国洛阳" };
let str = '{name},{sex},{age}';
let result = str.replace(/\{(\w+)\}/g, (match, key) => {
  if (data.hasOwnProperty(key)) {
    return data[key];
  }
  return match;
});

那就直接 replace

function replacer(context, template) {
    Object.keys(context).forEach((key) => {
        template = template.replaceAll(`{${key}}`, context[key])
    })
    return template
}

const data={ name:'寅春树', sex:"男", age:25, address:"中国洛阳" }
const result = replacer(data, '{name},{sex}{age}') // '寅春树,男25'

大佬,没看明白题啊 这看着不就是拿数据里面的这三个字段吗?还是说接口返回的字段名是动态的,不一定是这三个?

用字符串替换

const  data = {name:'寅春树',sex:"男",age:25,address:"中国洛阳"}
let str = `{name},{sex}{age}`
str = str.replace("{name}", data.name);
str = str.replace("{sex}", data.sex);
str = str.replace("{age}", data.age);
console.log('str', str); // '寅春树,男25'

实际使用中可以遍历data中的key,动态替换

let data = { name: '寅春树', sex: "男", age: 25, address: "中国洛阳" };
let str = '{name},{sex},{age}';
let result = str.replace(/\{(\w+)\}/g, (match, key) => {
  if (data.hasOwnProperty(key)) {
    return data[key];
  }
  return match;
});

可以试试 https://github.com/jhonmart/python-format-js

import format from "python-format-js";

const template = `{name},{sex}{age}`;
const data = { name: "寅春树", sex: "男", age: 25, address: "中国洛阳" };
const text = format(template, data);

console.log(text === "寅春树,男25"); // true
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏