Преобразование строкового представления массива обратно в массив - PullRequest
0 голосов
/ 19 июня 2020

У меня есть строковое представление массива, как показано ниже

 "[name = preload cacheHits = 30 onDiskHits = 4 inMemoryHits = 26 misses = 0 size = 2913 averageGetTime = 0.1 evictionCount = 0 ]\n[  name = information cacheHits = 0 onDiskHits = 0 inMemoryHits = 0 misses = 0 size = 0 averageGetTime = 0.0 evictionCount = 0 ]"

Я пытаюсь преобразовать его обратно в массив, я пробовал с Javascript, но есть ли способ сделать это java?

 let string = "[name = preload cacheHits = 30 onDiskHits = 4 inMemoryHits = 26 misses = 0 size = 2913 averageGetTime = 0.1 evictionCount = 0 ]\n[  name = information cacheHits = 0 onDiskHits = 0 inMemoryHits = 0 misses = 0 size = 0 averageGetTime = 0.0 evictionCount = 0 ]"
 let arr = string.split('\n');
 arr.forEach((element) => {
          this.orginalArray = JSON.parse(element);
        });

но это дает мне ошибку

 Unexpected token a in JSON at position 4
    at JSON.parse (<anonymous>)
    at eval (m.vue?90cd:84)
    at Array.forEach (<anonymous>)
    at eval (M.vue?90cd:83)

Что не так с кодом?

1 Ответ

2 голосов
/ 19 июня 2020

Один из способов преобразования этой строки в массив объектов:

let string = "[name = preload cacheHits = 30 onDiskHits = 4 inMemoryHits = 26 misses = 0 size = 2913 averageGetTime = 0.1 evictionCount = 0 ]\n[  name = information cacheHits = 0 onDiskHits = 0 inMemoryHits = 0 misses = 0 size = 0 averageGetTime = 0.0 evictionCount = 0 ]"

console.log(
  string
    // split items by newline
    .split('\n')
    // map each item to an object
    .map(item => Object.fromEntries(
      // word characters followed by equal sign followed by word characters
      item.match(/\w+\s*=\s*\w+/g)
        // split by equal sign and trim each part
        .map(entry => entry.split('=').map(part => part.trim()))
    ))
);

Ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...