iT邦幫忙

1

javascript 判斷多階陣列KEY是否存在

請問,javascript是否有函數可判斷多階陣列的KEY值是否存在。
目前僅知道一階陣列可用 indexOf 或 hasOwnProperty。

看更多先前的討論...收起先前的討論...
dragonH iT邦超人 5 級 ‧ 2019-12-13 14:37:26 檢舉
多階陣列是什麼意思
應該是多維吧XD
dragonH iT邦超人 5 級 ‧ 2019-12-13 14:44:04 檢舉
喔喔XD

可是 key值 我也是不太懂

是指 array 的 value 嗎

還是你是 object array

然後指的是 object 的 key
tsaipowun iT邦新手 5 級 ‧ 2019-12-13 15:22:11 檢舉
例如:有定義一維陣列 arr['a','b','c'];
若直接 判斷是否有3階陣列存在 arr[1][3][1],會直接報錯
typeof( array[1][3][1])
tsaipowun iT邦新手 5 級 ‧ 2019-12-13 15:30:34 檢舉
如何能不報錯,直接給此KEY(array[1][3][1])不存在就好
fillano iT邦超人 1 級 ‧ 2019-12-13 17:55:13 檢舉
給一下程式的上下文,不然有點難猜你要做什麼。只是不要報錯,用try catch包起來就好了。
fillano iT邦超人 1 級 ‧ 2019-12-13 17:56:08 檢舉
如果要測試特定鍵值是否存在,可以自己寫一個函數來檢查。
fillano iT邦超人 1 級 ‧ 2019-12-13 18:21:31 檢舉
例如:
https://jsfiddle.net/fillano/5u7hm9fa/14/
tsaipowun iT邦新手 5 級 ‧ 2019-12-14 07:47:12 檢舉
案例如下,有一個資料list,若要判斷一個3維的KEY是否存在,剛好資料是1維(相差2維),會報錯

list={"number":0,"code":1,"error_code":1};
if(typeof(list['a']['b']['c']!="undefined")){
alert("OK");
}
fillano iT邦超人 1 級 ‧ 2019-12-14 13:20:10 檢舉
不用你自己的例子怕你看不懂,所以改了一下。函數本身是沒變的:
https://jsfiddle.net/fillano/5u7hm9fa/16/
tsaipowun iT邦新手 5 級 ‧ 2019-12-14 22:09:47 檢舉
感謝提供,不會報錯了^_^
1
listennn08
iT邦高手 9 級 ‧ 2019-12-13 14:39:53

想了一下還是只有for可以用吧
以陣列為例

let a = [[0,1],[0,2]];
let n = [];
for (let i = 0; i< a.length; i++) {
    n = a[i];
    console.log(~n.indexOf(0)?true:false);
}
看更多先前的回應...收起先前的回應...
dragonH iT邦超人 5 級 ‧ 2019-12-13 14:49:27 檢舉

如果是這麼簡單的話

可以直接用 flat

    let arr = [[1,2],[3,4],[5,6]]
    console.log(arr.flat().indexOf(1) > -1 ) // true

可是他說 key 值 好像又不是這樣/images/emoticon/emoticon46.gif
原來還有 flat 這個方法/images/emoticon/emoticon32.gif

dragonH iT邦超人 5 級 ‧ 2019-12-13 14:55:37 檢舉

原來還有 flat 這個方法

好像是 ES6 還是 ES7 新增的/images/emoticon/emoticon12.gif

tsaipowun iT邦新手 5 級 ‧ 2019-12-13 15:28:40 檢舉

例如:有定義一維陣列 arr['a','b','c'];
若直接 判斷是否有3維陣列的key存在 arr[1][3][1],會直接報錯
typeof( arr[1][3][1])
有沒有辦法不會報錯

tsaipowun iT邦新手 5 級 ‧ 2019-12-13 15:30:44 檢舉

如何能不報錯,直接給此KEY(array[1][3][1])不存在就好

我記得我以前的解法是,先化成object。再做判斷。
就可以用typeof處理多維不會報錯。

tsaipowun iT邦新手 5 級 ‧ 2019-12-13 16:37:10 檢舉

請問如果資料為 var array = {"A":1};
判斷 array['B']['C']['D'] 是否被定義,要怎樣而不會報錯

判斷 array['B']['C']['D'] 是否被定義,要怎樣而不會報錯

array.b.c.hasOwnProperty('D')
tsaipowun iT邦新手 5 級 ‧ 2019-12-13 17:46:27 檢舉

好簡約的程式碼。。。對JS語法不很懂,可以用案例嗎? 感謝

tsaipowun iT邦新手 5 級 ‧ 2019-12-14 07:48:47 檢舉

會報錯
list={"number":0,"code":1,"error_code":1};
list.b.c.hasOwnProperty('D');

0
浩瀚星空
iT邦超人 1 級 ‧ 2019-12-13 15:08:52

沒有直接的函數。一般都是搭配keys跟map來做處理的。
你可以自已寫一個來用吧。

我以前有寫過。只是現在很懶的找出去。我記得不困難。
要不然就看看有沒有佛心來的幫你寫一個來用。

froce iT邦大師 1 級 ‧ 2019-12-13 15:13:45 檢舉
tsaipowun iT邦新手 5 級 ‧ 2019-12-13 15:25:34 檢舉

例如:有定義一維陣列 arr['a','b','c'];
若直接 判斷是否有3維陣列的key存在 arr[1][3][1],會直接報錯
typeof( arr[1][3][1])
有沒有辦法不會報錯

2
froce
iT邦大師 1 級 ‧ 2019-12-13 15:46:21

用3元運算子

let test = [
    1,
    [2, 2],
    [
        [3, 3],
        2
    ]]

let t = test[1][0][0]? test[1][0][0] : undefined

console.log(t)

下次問問題記得舉一個別人看的懂得例子。

看更多先前的回應...收起先前的回應...
tsaipowun iT邦新手 5 級 ‧ 2019-12-13 15:50:14 檢舉

好的,謝謝回覆

tsaipowun iT邦新手 5 級 ‧ 2019-12-13 16:43:35 檢舉

請問如果資料為 var array = {"A":1};
判斷 array['B']['C']['D'] 是否被定義,要怎樣而不會報錯

froce iT邦大師 1 級 ‧ 2019-12-13 17:17:43 檢舉

答案給你了啊,自己動手改改看吧

tsaipowun iT邦新手 5 級 ‧ 2019-12-13 17:28:04 檢舉

感謝回復,案例中test是有3階,若需要確認的是5階(超過2階),會報錯
let test = [
1,
[2, 2],
[
[3, 3],
2
]]

let t = test[1][0][0][0][0]? 1: undefined

我要發表回答

立即登入回答