簡體   English   中英

將字符串錯誤地轉換為變量

[英]wrong conversion of a string to a variable

請協助我知道為什么當我調用一個函數並使用“原始形式”的字符串傳遞參數時,我得到了正確的輸出,但是當我首先將其分配給變量時,卻得到了一個不同的輸出。

我想將CSV字符串轉換為JavaScript數組數組。 當我以原始格式(即console.log(relay('a;b\\nc;d', ';'))在控制台中傳遞參數時,我得到了正確的結果,它是一個數組,但是當我將字符串轉換為變量dat我得到了錯誤的數組[“;”],這基本上是字符串的第二部分。

 relay = (dat, delimiter = ',', tested = false) => dat .split('\\n') .slice(tested ? dat.indexOf('\\n') + 1 : 0); let dat = ('a;b\\nc;d', ';'); console.log(relay(dat)); // [";"] console.log(relay('a;b\\nc;d', ';')); 

當我使用dat變量調用函數時,輸出為[";"]

當我將函數調用為console.log(relay('a;b\\nc;d', ';'))我得到了正確的輸出["a;b", "c;d"]

我期望的結果是數組[["a;b"], ["c;d"]]的數組

這條線

let dat = ('a;b\nc;d', ';');

不按照你的想法做。 它使用的是逗號運算符 ,該運算符僅返回其正確的操作數,因此等效於

let data = ';';

您可以為變量分配一個數組,然后在調用中將其傳播。

 relay = (dat, delimiter = ',', tested = false) => dat .split('\\n') .slice(tested ? dat.indexOf('\\n') + 1 : 0); let dat = ['a;b\\nc;d', ';']; console.log(relay(...dat)); console.log(relay('a;b\\nc;d', ';')); 

function log(s1, s2) {
  console.log(s1, s2);
}

let str1 = 'a';
let str2 = 'b';
log(str1, str2); // 'a' 'b'

let str = ('a', 'b');
console.log(str); // 'b'
log(str); // 'b' undefined

請注意,您不能為一個變量分配兩個值,也不能使用它作為參數傳遞給函數。 要實現所需的功能,可以使用兩個變量,一個用於dat ,一個用於delimiter ,使用這兩個變量調用該函數。

let dat = 'a;b\nc;d';
let delimiter = ';';
console.log(relay(dat, delimiter));

另一種方法是使用具有多個屬性的對象,例如

relay = ({ dat, delimiter = ',', tested = false }) => {
  dat
    .split('\n')
    .slice(tested ? dat.indexOf('\n') + 1 : 0);

  return dat;
}

let config = {
  dat: 'a;b\nc;d', 
  delimiter: ';'
};
console.log(relay(config));

您已定義dat

let dat = ('a;b\nc;d', ';');

您應該嘗試打印dat ,以便可以看到它的外觀:

console.log(dat);

您會看到dat是';' -這是因為逗號運算符相對晦澀難懂,該運算符僅在最后一個逗號之后選擇值。 就您而言, '; '出現在最后一個逗號之后。

我注意到默認參數也是通過逗號運算符傳遞的,即字符串沒有作為一個整體傳遞('a; b \\ nc; d',';');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM