javascript - 从对象中获取一个值并使用该值在某个条件下填充同一对象中的其他键
问题描述
所以这里有一个例子:
{
"part": "Intro",
"e": "------5/6------8\\6-|-------------------|-------------------",
"B": "-----------9-------|---------6p8---(6)-|-------------------",
"G": "--8----------------|---8h9-------------|--<8>--------------",
"D": "",
"A": "",
"E": "",
"endMsg": "Continue..."
}
注意:双斜杠只有在呈现文本时才会变成一个斜杠。
我想从这个不为空的对象中获取值。(所以这可能来自
e
钥匙或B
钥匙。只要它不是空的。)然后我在这里使用这个表达式替换那个值:
str.replace(/[0-9-.a-zA-Z // \ ~ ( ) < >]/g, '-');
它用于将数字、字母和其他字符替换为破折号。
- 我想将该值与破折号和管道字符一起使用,只是为了填充同一对象内的其他空键。
- 最后,我希望它看起来像这样:
{ "part": "Intro", "e": "------5/6------8\\6-|-------------------|-------------------", "B": "-----------9-------|---------6p8---(6)-|-------------------", "G": "--8----------------|---8h9-------------|--<8>--------------", "D": "-------------------|-------------------|-------------------", "A": "-------------------|-------------------|-------------------", "E": "-------------------|-------------------|-------------------", "endMsg": "Continue..." }
我不知道如何在代码中实现这一点。请帮忙。
解决方案
您可以遍历每个键值对并在其为空时替换该值。请注意,反斜杠用于转义字符。为了解决这个问题,我们首先用破折号替换反斜杠,然后替换其余部分。
正则表达式也可以简化为/[^-|]/g
这意味着替换所有符号,除了-
和|
const lines = {
"part": "Intro",
"e": "------5/6-----8\\6-|-------------------|-------------------",
"B": "-----------9-------|---------6p8---(6)-|-------------------",
"G": "--8----------------|---8h9-------------|--<8>--------------",
"D": "",
"A": "",
"E": "",
"endMsg": "Continue..."
};
const createFullLines = (lines, blacklist = ['part', 'endMsg']) => {
// Find a line that is not empty
const line = Object.entries(lines).find(([key, line]) => {
return !blacklist.includes(key) && line.trim();
});
// Exit if all lines are empty
if(!line) return lines;
// Destructure to get only value
const [_, filledLine] = line;
// Create new line with only dashes
const newLine = filledLine.replace(/[^-|]/g, '-');
// Update lines
for(const key in lines) {
lines[key] ||= newLine;
}
return lines;
}
const result = createFullLines(lines);
console.log(result);
推荐阅读
- python-3.x - 在没有内置排序的情况下按字母顺序对元组进行排序
- java - 选项和映射操作
- angular - 订阅后立即响应
- azure - 如何获取已登录我的 WebApp 的“个人帐户”用户列表
- excel - 如何根据分组变量计算 PowerQuery 中的百分位数?
- regex - 正则表达式修复属性
- r - http://localhost:6000/__swagger__/ 可能暂时关闭,或者它可能已永久移动到新的网址。水管工招摇-UI 不工作
- python - seleniumwire_options=None: SyntaxError: 无效语法
- javascript - 如何删除对已删除属性的子项的引用
- lua - 您可以不再将要求分配给变量并引用该变量吗