ES6 и его поведение. JavaScript [дубликат]

134
08 февраля 2022, 09:50
На этот вопрос уже дан ответ здесь:
Странные результаты метода .filter в javascript (1 ответ)
Закрыт 2 года назад.

Всем привет. Хотел бы узнать мнение опытных кодеров, почему такое поведение у метода filter. Вообщем изучая Ajax мне стало интересно, а можно ли получить массив с сервера не преобразовывая его методом $dataSer = json_encode($_SERVER); и получая на клиенте let data = JSON.parse(data); , а тупо закинуть на сервере print_r($_SERVER); и попытаться воссоздать на клиенте результат который бы я получил парсом.

На клиенте т.к. в чистом виде

    Array
    (
        [HTTP_HOST] => localhost
        [HTTP_CONNECTION] => keep-alive
        [HTTP_ORIGIN] => http://127.1.0.0:5500
и т.д.

Я начинающий и скажем план готовил на ходу примерно должно было так. Мне нужно для начала получить чистые массивы построчно, а потом я предполагал их делить убрав при этом =>. Ну далее что нибудь

    let regV = /\[\w+]\s=>\s.+/g;//выбирает строку от [  и до конца строки
    let arr = data.match(regV);
    console.dir(arr);
//результат
0: "[HTTP_HOST] => localhost"
1: "[HTTP_CONNECTION] => keep-alive"
2: "[HTTP_ORIGIN] => http://127.1.0.0:5500"

Вот дальше меня удивило.

let spl = arr[0].split('=>');//нормально 
//результат
0: (2) ["[HTTP_HOST] ", " localhost"]

Ну думаю создам фильтр

let arrFilter = arr.filter((item)=>{
  console.dir(item.split('=>'));//тут норм, на выходе не норм
  return item.split('=>');
});
console.dir(arrFilter);
//никакого результата
0: "[HTTP_HOST] => localhost"
1: "[HTTP_CONNECTION] => keep-alive"
2: "[HTTP_ORIGIN] => http://127.1.0.0:5500"

Что не так? метод map справился с этой задачей. /------------------------------------------------------------------/

Вот немного велосипеда. Ассоциативный массив на php можно передать прямо так

print_r($_SERVER);
//var_export($_SERVER): или так.
И получить на JS. Работает как на обычном объекте так и на Map.
function requesServer(data){
  let regExpForMatch = /'.+|\[.+/gmi;
  let regExpForSplit = /['\[]|^\)|['\]]| => |\,$/gmi; 
  let arrMatch = data.match(regExpForMatch);//выборка нужного текста построчно в массив
  let dataServer = {};//данные перенёс в объект
  let arrMap = arrMatch.map((item)=>{
    let arrSplit = item.split(regExpForSplit);
    if(arrSplit[3] === ""){
      for(let i = 2; i <= arrSplit.length; i++){
        if(i==arrSplit.length-1){dataServer[arrSplit[1]] = ''; break;}
        if(arrSplit[i]==''){continue;}
        dataServer[arrSplit[1]] = arrSplit[i]; break; }  
    }else{
      dataServer[arrSplit[1]] = arrSplit[3]
    }
return [arrSplit[1], (arrSplit[3] == "")?arrSplit[4]:arrSplit[3]];                     
});
let dataServer1 = new Map(arrMap);//можно закинуть 
console.dir(dataServer);
console.dir(dataServer1);
}
Answer 1

Я конечно не понимаю что за велосипед вы изобретаете, но вот на выходе всё вполне ожидаемо:

То есть вот вы разбили строку на массив строк "[Ключ] => значение", после чего фильтр преобразует массив вот так:

// Было
[
  "[Ключ0] => значение0",
  "[Ключ1] => значение1",
  ...
]
// Стало
[
  ["[Ключ0] ", " значение0"],
  ["[Ключ1] ", " значение1"],
  ...
]

Если Вам нужно превратить это всё в обьект, то придётся продежаться по всем парам вот так:

let obj = {}
for (let i = 0; i < arrFilter.length; i++) {
  let keyValue = arrFilter[i]
  obj[keyValue[0]] = keyValue[1]
}

Но лучше конечно использовать JSON, потому что искать нужную пару по массиву пар, где ключи ещё нужно проверять на равенство искомому ключу... Ну это жесть вообщем.

READ ALSO
Что значит оператор `!!`? [дубликат]

Что значит оператор `!!`? [дубликат]

Двойное не - что это значит?

68
Вывод в форму результата работы функции в js

Вывод в форму результата работы функции в js

Прошу прощения за тупость, но может найдётся кто нибудь, кто подскажет чайнику как вывести результаты (obj) в форму? Мне не важен конкретный...

90
Помогите разобраться с функцией

Помогите разобраться с функцией

Задача заключается в том, чтобы создать функцию, которая возвращает сумму последовательности целых чиселПоследовательность определяется...

70
очередность JS Opacity [дубликат]

очередность JS Opacity [дубликат]

По клику на кнопку, должна меняться прозрачность div с "ТЕКСТ1", потом должен плавно появлятся "ТЕКСТ2" в этом блоке

80