2017-07-26 32 views
1

我正在构建一个按字母顺序排列的选择器。所以,你选择["A", "D"],它会查找联系人,其姓氏开始与A,B,C和D大小为2的数组 - 如果其中一个元素为空,则将其设置为等于另一个

但是,如果你只挑["A", ""]["", "D"],那么我只想回到["A", "A"]["D", "D"]

是否有写以下的选择:

const lookup = letters; 

if (letters[0] === '' && letters[1] !== '') { 
    lookup[0] = letters[1]; 
} 
if (letters[0] !== '' && letters[1] === '') { 
    lookup[1] = letters[0]; 
} 

感谢

+0

有你'混合和lookup''letters'理由吗?他们都引用相同的数组。 – 4castle

回答

1

你可以凝聚的逻辑一点。

const lookup = ['A', '']; 

lookup[0] = lookup[0] || lookup[1]; 
lookup[1] = lookup[1] || lookup[0]; 

console.log(lookup); 
+0

在现实生活中,确保预先声明'letters',因为像这样初始化变量隐式地将'letters'创建为全局变量而不是局部'const'。 – 4castle

+0

@ 4castle,感谢您的反馈。我没有意识到这一点。我已经更新了我的答案。 – fubar

0

可以将阵列映射,并且如果当前值是空的,它设置为下一个元素值,先前的元素值或''

let arr1 = ['A', '']; 
 
let arr2 = ['', 'D']; 
 
let arr3 = ['A', 'D']; 
 
let arr4 = ['', '']; 
 

 
function fix(arr) { 
 
    return arr.map((cv, idx, ar) => cv === '' ? ar[idx + 1] || ar[idx - 1] || '' : cv); 
 
} 
 

 
console.log(fix(arr1)); 
 
console.log(fix(arr2)); 
 
console.log(fix(arr3)); 
 
console.log(fix(arr4));

相关问题