Не могу исправить свой скрипт, чтобы войти так, как мне нужно - PullRequest
0 голосов
/ 03 июля 2019

Так что это действительно действует мне на нервы.Мне нужно было объяснить это немного лучше, так что вот оно.Я пытаюсь сделать мой журнал сценариев в консоли Google определенным образом.У меня есть несколько изображений, которые помогут объяснить. Давайте зайдем.

Итак, во-первых, это то, как в данный момент ведется регистрация. Что пока хорошо.Я счастлив с этим.Это не один большой массив, красивый и аккуратный.Изображение ниже: (https://i.gyazo.com/81fc8d76b34a81f4fff7fc23e94f1bf1.png)

Итак, это последний отправленный журнал (вы можете видеть на изображении выше.) Он просто отредактирован так, как мне нужно для регистрации: [[346,453],[346,452],[346,452],[346,453],[346,453],[347,453],[347,453],[347,454],[348,454],[349,454],[350,454],[351,454],[352,454],[353,454],[354,454],[354,453],[355,452],[355,453]]

Поэтому я пытаюсь сделать так, чтобы все журналы отправлялись просто так. ^^ Замена пробелов между каждой парой запятой и добавление "[" и "]" к каждой паре.

Так как яхотел бы, чтобы он регистрировался: (действительно помогает) (https://i.gyazo.com/af179df0b2ce93f018809f6921bce59a.png)

Мой сценарий:

xhr=new XMLHttpRequest();

xhr.open("GET", "http://myurl.com/someURLWITH.svg");

xhr.addEventListener("load", function() {
const xmlDoc = new DOMParser().parseFromString(
this.responseText.trim(),
"image/svg+xml"
);

const polylines = Array.from(xmlDoc.getElementsByTagName('polyline'));

var Lines = (polylines.map( pl => pl.getAttribute('points').split(' ').map(
pair => pair.split(',').map(x=>+x),

console.log("[" + pl.getAttribute('points') + "]")
)
));
});
xhr.send();

Имейте в виду !!! Я не хочу, чтобы это был один большой массив!!!! То, как он регистрирует каждое из них по отдельности, идеально. Мне просто нужно изменить способ, которым он регистрирует каждое из них.

Так что в моем коде вы можете увидеть console.log("[" + pl.getAttribute('points') + "]") Я пытался сделать так:это console.log("[" + pl.getAttribute("[" + 'points' + "]") + "]") действительно молиться, это бы сработало, но я был не прав. Как всегда.

Так что да, просто вместо того, чтобы регистрироваться как это [346,453 346,452 346,452 346,453 346,453 347,453 347,453 347,454 348,454 349,454 350,454 351,454 352,454 353,454 354,454 354,453 355,452 355,453] ... Я хотел бы, чтобы это регистрировалось именно так[[346,453],[346,452],[346,452],[346,453],[346,453],[347,453],[347,453],[347,454],[348,454],[349,454],[350,454],[351,454],[352,454],[353,454],[354,454],[354,453],[355,452],[355,453]] Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Ваш код почти был там, но то, что вы записывали на консоль, было нелепо, поскольку это был просто атрибут points, неизмененный

Итак, как-то так

const polylines = Array.from(xmlDoc.getElementsByTagName('polyline'));
const Lines = polylines.map(pl => pl.getAttribute('points').split(' ').map(pair => pair.split(',').map(Number)));

Lines.forEach(line => console.log(JSON.stringify(line)));

Или, учитывая, что вторым аргументом Array.from является функция map, вы можете еще больше упростить код до

const Lines = Array.from(xmlDoc.getElementsByTagName('polyline'), pl => pl.getAttribute('points').split(' ').map(pair => pair.split(',').map(Number)));

Lines.forEach(line => console.log(JSON.stringify(line)));

Обратите внимание, что console.log выполняется ПОСЛЕ обработки

что касается комментария

Lines.forEach(line => {
    // here you can post each line to whatever you need
});
0 голосов
/ 03 июля 2019

Пожалуйста, попробуйте это, может быть, это будет работать для вас.

var dt = "346 453 346 452 346 452 346 453 346 453 347 453 347 453 347 454 348 454 349 454 350 454 351 454 352 454 353 454 354 454 354 453 355 452 355 453";

function fnGetObject(data) {
    var objList = [];
    var obList = data.split(' ');

    var obResult = []
    for (var i = 0; i < obList.length; i += 2) {
        obResult.push([parseInt(obList[i]), parseInt(obList[i + 1])]);
    }
    return JSON.stringify(obResult);
}

console.log(fnGetObject(dt));
...