Tôi muốn làm như saucách để suy biến mẫu bên JavaScript đối tượng
var obj = {
animal: "${animal}"
};
var res = magic(obj, {animal: "cat"});
// res => {animal: "cat"}
magic
là một số chức năng để làm công việc bẩn. Rõ ràng obj
có thể phức tạp hơn với nhiều khóa, mảng lồng nhau, v.v. Biến mẫu có thể nằm trong một mảng như thế này
var obj = {
animals: ["cat", "dog", "${animal}", "cow"]
};
và nó có thể ở bất kỳ đâu trong mảng đơn giản như vậy làm obj.animals[2] = "bat";
không khả thi.
Tôi đã tìm thấy underscore-tpl library mà tôi có thể đạt được những gì tôi muốn, nhưng tôi muốn biết nếu có các giải pháp khác để tham khảo trong tương lai và vì tôi đã có một thời gian khó tìm underscore-tpl ở nơi đầu tiên.
sử dụng thực tế của tôi là trường hợp là tôi có một tập tin config.json nơi tôi có một vài tờ khai như sau
{
"task1": {
"command": "command-line-program",
"args": [
"--input", "{{input}}",
"--flag1",
"--output", "{{output}}",
"--flag2",
],
"options": {
"cwd": "path-to-working-dir"
}
}
}
tôi phân tích consig.json này sử dụng JSON.parse(...)
và tôi gọi require("child_process").spawn
với command
, args
và thông số options
được khai báo trong tệp, tuy nhiên args
thay đổi rất nhiều, cờ được thêm, sắp xếp lại và công cụ, vì vậy chỉ cần thực hiện config.task1.args[1] = "<input value>";
liên quan đến việc thay đổi mã gọi spawn
và điều này dễ bị lỗi.
Cập nhật
Dựa trên the accepted answer tôi đã tạo ra một gói phần mềm đơn giản (located here) mà tôi có thể bao gồm trong các dự án của tôi, cảm thấy tự do để sử dụng nó.
Tại sao không chỉ 'động vật: res.animal'? Nếu bạn cần nội suy ở giữa một chuỗi lớn hơn, hãy kiểm tra ES2015 [chuỗi mẫu] (http://es6-features.org/#StringInterpolation). * chỉnh sửa * oh OK Tôi thấy những gì bạn đang nhận được. – Pointy
Tìm các công cụ mẫu JS. Lưu ý rằng yêu cầu tài nguyên ngoài trang web, thư viện, v.v. thực sự là OT cho SO. –
@ DaveNewton Tôi thừa nhận đây không phải là câu hỏi tốt nhất mọi lúc :) Tôi thực sự chỉ muốn đặt thứ gì đó "ra khỏi đó", để tôi (và những người khác) có thể tìm thấy nó dễ dàng hơn, bởi vì tôi đã gặp khó khăn trong việc tìm kiếm một giải pháp không đau cho việc này. –