js
1function newAssign(target, ...sources) {
2 sources.forEach((source) => {
3 const descriptors = Object.keys(source).reduce((descriptors, key) => {
4 const descriptor = Object.getOwnPropertyDescriptor(source, key);
5 const value = descriptor.value;
6 if (typeof value == "object") {
7 newAssign(target[key], value);
8 } else {
9 descriptors[key] = descriptor;
10 }
11 return descriptors;
12 }, {});
13 Object.defineProperties(target, descriptors);
14 });
15 return target;
16}
17
18const defaultOptions = {
19 a: true,
20 b: false,
21 c: {
22 a: true,
23 b: true,
24 c: {
25 b: false,
26 },
27 d: {
28 a: [0, 2, 3]
29 }
30 }
31};
32const yourOptions = {
33 a: false,
34 c: {
35 b: false,
36 c: {
37 a: true
38 }
39 }
40};
41const options = newAssign(defaultOptions, yourOptions);
42console.log(options);
とりあえず、いろいろ情報を整理してこんな感じのコードで自分のやりたいことはできました。
自分用なので不要な部分があったり、値の構造によってはエラーが発生してしまいますが...
とりあえず解決したことを報告させていただきます。皆様ありがとうございました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。