簡體   English   中英

有很多變量是有序的。 我需要使用 JavaScript 將它們轉換為包含其他內容但不想一一進行

[英]Have a lot of variables that are in order. I need to convert them using JavaScript to contain something else but don't want to do it one by one

首先我不是程序員。 我需要為我的工作使用一些非常基本的 HTML、CSS 和 XML。 我使用的程序也允許運行 javascripts。

我的 XML 文件中通常有很多變量。 他們 go 是這樣的:

VAL001
VAL002
VAL003
VAL004

你懂了。 這些變量通常是復選框。 這些值可以是“已檢查”或“未檢查”。 我沒有將這些變量嵌入到 HTML 代碼中,而是傾向於將其轉換為其他內容,以便它變得更好。 像這樣:

if ( VAL001 == 'Checked' ) CHK001 = '✓';
else CHK001 = '';

完成此操作后,我在 HTML 中插入 CHK001(而不是 VAL001),因此如果選中該框,則我會得到一個很好的復選標記,而未選中則什么都沒有。 當有很多這樣的盒子時,一個一個地做並不是太有效。

我在 JavaScript 中嘗試的是:

var i;
for ( i = 1, i <= 9, i++ ) {
  if ( VAL00$i == 'Checked' ) CHK00$i = '&#10003;'
  else CHK00$i = '';
}
var j;
for ( j = 10, j <= 99, j++ ) {
  if ( VAL0$j == 'Checked' ) CHK0$j = '&#10003;'
  else CHK0$j = '';
}

我認為這會用 i 和 j 替換最后一個數字,我會得到我需要的。 不幸的是,這只是提出了一個 ReferenceError 說 VAL00$i 找不到。

如果我用 [i] 和 [j] 替換 $i 和 $j,我會得到相同的 ReferenceError,但是這次 i 和 j 沒有被告知是錯誤的,所以我得到 VAL00 找不到。 一個簡單的解決方案真的會加快我的速度。 先感謝您!

您可以將變量放在一個數組中,然后使用 map 來檢查變量並將其更改為刻度線與否。

var array = [
    VAL001,
    VAL002,
    VAL003,
    VAL004
];

var newArray = array.map(val=>{
    if (val === 'Checked') return '&#10003;';
    else return '';
});

或者,如果您在檢查完所有內容后需要知道變量的名稱,您可以使用 object。

var obj = {
    VAL001: VAL001,
    VAL002: VAL002,
    VAL003: VAL003,
    VAL004: VAL004
};
var newObj;
for (var i of Object.keys(obj){
    if (obj[i] === 'Checked') newObj[i] = '&#10003;';
    else newObj[i] = '';
}

我們缺少有關您的環境的一些信息,但假設您的框架為您提供了一組全局變量,這應該可以幫助您入門:

for (var i=1, i<=99, i++) {
  var i_padded = i.toString().padStart(3, 0);
  if (window["VAL" + i_padded] == 'Checked') {
    window["CHK" + i_padded] = '&#10003;';
  } else {
    window["CHK" + i_padded] = "";
  }
}

為了訪問您的全局變量,我在這里使用window object。 這是假設您在瀏覽器或類似瀏覽器的環境中運行此 JS。

如果您將VAL001變量作為obj中的屬性,那么您可以執行如下操作。

這里i.toString().padStart(3, 0) ,對於i = 1它將返回001 ,對於i=10它將返回010 您可以使用obj[propertyName]訪問 object 的屬性。 所以這些值可以通過 obj[ VAL${index} ] 訪問。

 var obj = { VAL001: 'Checked', VAL002: '', VAL003: 'Checked', VAL004: '', VAL010: '', VAL099: 'Checked', }; var result = {}; for (var i = 1; i <= 99; i++) { let index = i.toString().padStart(3, 0); if (obj.hasOwnProperty(`VAL${index}`)) { if (obj[`VAL${index}`] == 'Checked') result[`CHK${index}`] = '&#10003;' else result[`CHK${index}`] = ''; } } console.log(result);

如果您在全局 scope 中有variables ,那么您可以使用windows["VAL001"]

 var VAL001 = 'Checked', VAL002 = '', VAL003 = 'Checked', VAL004 = '', VAL010 = '', VAL099 = 'Checked'; for (var i = 1; i <= 99; i++) { let index = i.toString().padStart(3, 0); if (window.hasOwnProperty(`VAL${index}`)) { if (window[`VAL${index}`] == 'Checked') window[`CHK${index}`] = '&#10003;' else window[`CHK${index}`] = ''; console.log(`CHK${index} = ` + window[`CHK${index}`]); } }

暫無
暫無

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

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