|
290 | 290 | for (const key of Object.keys(data)) {
|
291 | 291 | let newObject = object;
|
292 | 292 | let oldObject = new Object(newObject);
|
293 |
| - let keys = key.replace(/\[(\d+)\]/g, ".$1").split("."); |
| 293 | + let keys = key |
| 294 | + .replace(/\[(\d+)\]/g, ".$1") |
| 295 | + .split(".") |
| 296 | + .map((k) => (isNaN(k) ? k : Number(k))); |
294 | 297 | let value = data[key];
|
295 | 298 | let operator;
|
296 | 299 | if (keys[0].startsWith("$")) operator = keys.shift();
|
297 | 300 |
|
298 | 301 | let length = keys.length - 1;
|
299 | 302 | for (let i = 0; i < keys.length; i++) {
|
300 |
| - if (/^\d+$/.test(keys[i])) keys[i] = parseInt(keys[i]); |
| 303 | + // if (/^\d+$/.test(keys[i])) keys[i] = parseInt(keys[i]); |
301 | 304 |
|
302 | 305 | if (length == i) {
|
303 | 306 | if (operator) {
|
|
411 | 414 | if (typeof keys[i] === "number")
|
412 | 415 | newObject.splice(keys[i], 1);
|
413 | 416 | else delete newObject[keys[i]];
|
414 |
| - } else newObject[keys[i]] = value; |
| 417 | + } else if (typeof keys[i] === "number") { |
| 418 | + newObject.splice(keys[i], 0, value); |
| 419 | + } else { |
| 420 | + newObject[keys[i]] = value; |
| 421 | + } |
| 422 | + } else if ( |
| 423 | + typeof keys[i + 1] === "number" && |
| 424 | + !Array.isArray(newObject[keys[i]]) |
| 425 | + ) { |
| 426 | + newObject[keys[i]] = []; |
415 | 427 | } else {
|
416 |
| - newObject[keys[i]] = oldObject[keys[i]] || {}; |
417 |
| - newObject = newObject[keys[i]]; |
418 |
| - oldObject = oldObject[keys[i]]; |
| 428 | + newObject[keys[i]] = newObject[keys[i]] || {}; |
| 429 | + // newObject[keys[i]] = oldObject[keys[i]] || {}; |
| 430 | + // oldObject = oldObject[keys[i]]; |
419 | 431 | }
|
| 432 | + newObject = newObject[keys[i]]; |
420 | 433 | }
|
421 | 434 | }
|
422 | 435 | return object;
|
|
0 commit comments