---
# System prepended metadata

title: '[Codewars - 7kyu解題] Unique string characters 擷取兩個字串陣列中，互不重複的字母'
tags: [Javascript, .filter(), .concat(), .includes(), .has(), 7kyu, Set(), Codewars, Array]

---

# [Codewars - 7kyu解題] Unique string characters 擷取兩個字串陣列中，互不重複的字母

###### tags: `Codewars`,`7kyu`,`Javascript`,`Array`,`.concat()`,`Set()`,`.filter()`,`.has()`,`.includes()`

> Javascript菜鳥紀錄Codewars解題過程

## Instructions 題目
:link: https://www.codewars.com/kata/5a262cfb8f27f217f700000b

:pushpin: **Instructions:** 
接收兩組字串，將兩組字串中互不重複的字母依序組合成新字串回傳。
In this Kata, you will be given two strings a and b and your task will be to return the characters that are not common in the two strings.

:bulb: **Examples:** 

solve("xyab","xzca") = "ybzc" 
--The first string has 'yb' which is not in the second string. 
--The second string has 'zc' which is not in the first string.




## My Solution 我的解法

```javascript=
function solve(a,b){
 var arr = []
 b.split('').forEach(i => arr[i]=true);
 a.split('').forEach(i => {if(!arr[i]){arr.push(i);}})
 
 var arr2 = []
 a.split('').forEach(i => arr2[i]=true);
 b.split('').forEach(i => {if(!arr2[i]){arr2.push(i);}})
 
 return arr.concat(arr2).join('');
};
```





## Solutions(1) 其他更精簡的寫法
```javascript=
function solve(a,b) {
  let setA = new Set(a);
  let setB = new Set(b);
  
  return [...(a+b)]
  .filter(c => setA.has(c) ^ setB.has(c))
  .join("");

};
```

## Solutions(2) 其他更精簡的寫法
```javascript=
function solve(a,b){
 return (a+b).split("")
 .filter(c => !a.includes(c) || !b.includes(c))
 .join("");
};
```


## :memo: 學習筆記


:bulb: **JS兩個陣列比較,刪除重複值的巧妙方法**
https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/265216/

> 聰明的方法!

---

:bulb: **JavaScript 陣列處理方法 [filter(), find(), forEach(), map(), every(), some(), reduce()]**
https://wcc723.github.io/javascript/2017/06/29/es6-native-array/

---

:bulb: **Array.prototype.concat()**
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/concat
> 用來合併兩個或多個陣列。此方法不會改變現有的陣列，回傳一個包含呼叫者陣列本身的值，作為代替的是回傳一個新陣列。
```javascript=
const array1 = ['a', 'b', 'c'];
const array2 = ['d', 'e', 'f'];
const array3 = array1.concat(array2);

console.log(array3);
// expected output: Array ["a", "b", "c", "d", "e", "f"]
```

---

:bulb: **Set.prototype.has()**
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Set/has
> 對一個指定值元素在 Set 物件中的存在與否回傳一個布林值。
```javascript=
const set1 = new Set([1, 2, 3, 4, 5]);

console.log(set1.has(1));
// expected output: true
```

---

:bulb: **Array.prototype.includes()**
https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/Array/includes
> 判斷陣列是否包含特定的元素，並以此來回傳 true 或 false。
```javascript=
const array1 = [1, 2, 3];

console.log(array1.includes(2));
// expected output: true
```
