iT邦幫忙

0

在可增列明細表做檢查相異值

  • 分享至 

  • xImage

問題若沒有描述清楚,再麻煩和我說一下,我會做修正或補充。

目前新手小弟我透過低程式碼的軟體做設計表單
設計原因是使用者在使用表單填入可增列明細表時
需要透過檢驗
在兩筆以上明細時忽略null值之後的值若有相異值要出現警告!

嘗試過很多網上function都沒法達到我要的需求
針對arr做檢查(Foreach陣列的問題)

function arrRe(arr) {
    for (var i = 0; i < arr.length; i++) {
        if (arr[0]!= arr[i]){
            return false;
        }
    }
    return true;
}

忽略null值之排列arr

function arrResult(arr) {
  for(var i = 0; i < arr.length; i++) {
   if((arr[i]) == "") {
      arr.splice(i,1);
      i = i - 1;
    }
   }
return arr;
}

原先是想直接把第二個函數帶入第一個函數
但在只有單筆明細時 var test = typeof (arr);
型態卻非arr...所以出現錯誤
若只有單筆明細資訊他只會針對第一個字母顯示而非整串string
簡易明細表如下(按鈕後增列)
https://ithelp.ithome.com.tw/upload/images/20220221/20128506yvtfIm6P92.jpg

想請問各位大大們 程式碼要怎麼做修改才能達到我的程式設計要求
在多筆時忽略null值之相異值出現驗證錯誤
其餘(忽略null時可重複相同資料)正確
在單筆資料時都給予驗證正確

以及另外一個函式則是要取出所有明細內的"一筆"非null值若無則填入null值

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

3
Hankz
iT邦新手 2 級 ‧ 2022-02-21 13:19:56
最佳解答

通常來說 應該是如果有重複項目就告知錯誤比較常見...
算了 程式碼如下:

arr = [
 "aaa",
 "aaa",
 "",
 "bbb"
];

// 移除陣列中的空字串
function removeEmpty(arr) {
 newArr = [];
  for (i = 0; i < arr.length; i++) {
    if(arr[i] != "") {
    	newArr.push(arr[i]);
    }
  }
  return newArr;
}

// 確認是否有不同的item
function hasDifferentItem(arr) {
 newArr = [];
  for (i = 0; i < arr.length; i++) {
    if(newArr.includes(arr[i]) || newArr.length == 0) {
    	newArr.push(arr[i]);
    } else {
    	return true;
    }
  }
  return false;
}

// 使用
newArr = removeEmpty(arr);

if(hasDifferentItem(newArr)) {
	alert("陣列中有不同的項目");
} else {
	alert("陣列中沒有不同的項目");
}

DEMO

看更多先前的回應...收起先前的回應...
cho010012 iT邦新手 5 級 ‧ 2022-02-21 13:32:04 檢舉

感謝大大回應 我想請問一下 目前若是單行的時候(即單筆資料)並非arr型態 要怎麼設定若非arr型態時直接回傳值即可呢?

cho010012 iT邦新手 5 級 ‧ 2022-02-21 13:34:36 檢舉

https://ithelp.ithome.com.tw/upload/images/20220221/20128506QXpv4j6tFQ.jpg

Hankz iT邦新手 2 級 ‧ 2022-02-21 14:00:30 檢舉

可以用

  if(!Array.isArray(arr)) {
  	return arr;
  }

DEMO

cho010012 iT邦新手 5 級 ‧ 2022-02-22 08:11:37 檢舉

大神 請問我昨天測試時發現若是相同項目時還是出現false 需求是我利用hasDifferentItem去監測您提供的removeEmpty函式所產生的arr 若為非相同項目時才出現false (只差若為重複值也需要顯示true...)下圖正確為false改為true <但是在您提供的DEMO 顯示又是正確的..>

cho010012 iT邦新手 5 級 ‧ 2022-02-22 08:12:09 檢舉

https://ithelp.ithome.com.tw/upload/images/20220222/201285063OwARdteHl.jpg

Hankz iT邦新手 2 級 ‧ 2022-02-22 11:00:14 檢舉

把你的原始碼貼上來 我們會比較好幫你找原因喔

cho010012 iT邦新手 5 級 ‧ 2022-02-22 11:28:36 檢舉

我是採用SmartBPM這個整合ERP軟體 是針對它裡面的元件下條件判斷函式 我嘗試過貼原始碼<包含CSS HTML>但發現明細表的那欄位會直接消失... hasDifferentItem這個函式DEMO上符合我所需要的條件 但是不知道為何在我的軟體套用Javascript函式時卻在重複值的時候 出現錯誤的判斷

Hankz iT邦新手 2 級 ‧ 2022-02-22 12:16:15 檢舉

嗯... 如果只有這些資訊 我也很難幫你判斷原因

建議可以在程式的運作過程中持續印出變數
觀察變化 看看是從哪裡出問題的
剩下就只能靠你自己了

cho010012 iT邦新手 5 級 ‧ 2022-02-22 13:10:32 檢舉

沒關係 還是很謝謝Hankz 我再多嘗試看看
目前有找到線上的測試環境 http://trial.flowportal.com/roles/admin/
目前有建立一個表單需求 右上方後台 表單庫 測試明細 開啟表單 可看到原始碼

cho010012 iT邦新手 5 級 ‧ 2022-02-23 08:44:29 檢舉

我昨天嘗試一下發現還是有異常 請問要如何修改能將hasDifferentItem這個涵式與removeEmpty合併嗎 <即忽略掉null值做是否有不同值的檢查>

Hankz iT邦新手 2 級 ‧ 2022-02-23 09:36:35 檢舉

在hasDifferentItem直接引用就行

// 確認是否有不同的item
function hasDifferentItem(arr) {
  if(!Array.isArray(arr)) {
  	return false;
  }
  arr = removeEmpty(arr);
	newArr = [];
  for (i = 0; i < arr.length; i++) {
    if(newArr.includes(arr[i]) || newArr.length == 0) {
    	newArr.push(arr[i]);
    } else {
    	return true;
    }
  }
  return false;
}

DEMO

cho010012 iT邦新手 5 級 ‧ 2022-02-23 16:01:31 檢舉

謝謝!!! 我透過您提供的函式成功在軟體上執行驗證成功了!!

Hankz iT邦新手 2 級 ‧ 2022-02-23 17:14:01 檢舉

順利解決問題就好

1
海綿寶寶
iT邦大神 1 級 ‧ 2022-02-21 11:46:10

如果想說清楚問題
快點得到答案

就在下面貼上你目前的程式碼
(「檢驗」的 function 可以留白不做事,只要宣告/呼叫就好)

二選一,看你喜歡那一個
1.W3School
2.JS fiddle

cho010012 iT邦新手 5 級 ‧ 2022-02-21 13:30:24 檢舉

感謝大大回應...但目前只有下js條件去判斷元件是否有相異值 其他軟體都會用拖曳那些去建立...所以不是很了解

我要發表回答

立即登入回答