现在有个6个长度的数组a,里面元素是 1.2.3.4.5.6
会得到一个数组 1.1.1.1.1.1
如果是1.2.3.5.6
会得到一个数组1.1.1.0.1.1
如果是6
会得到一个数组0.0.0.0.0.1
或者有个7个长度的数组 里面会有1.2.3.4.5
会得到一个数组 1.1.1.1.1.0.0
a里面的元素长度不固定但是可以获取它的长度
这个方法怎么写
语文不太好不好意思重新整理如下:
就是有一个数组现在只知道它的长度a(长度等于或者大于元素中最大的数),里面的元素有可能是1 也有可能是1.2.3 也有可能是1.3.6.8
里面元素就是从1开始的自然数
根据这个去得到另一个数组
元素为1的但是数组长度是8的话 那么他得到的另一个数组是1.0.0.0.0.0.0.0 就是他的2345678都没有就直接给它补0
比如1.3.6.8 它的长度是8的话 得到的另一个数组是1.0.1.0.0.1.0.1 不知道有没有说明白。。
function arr2bin(arr) {
let max = Math.max.apply(Math, arr.concat(arr.length).filter(item => item));
return Array.from({length: max}, (val,key) => Number(arr.includes(key+1)));
}
let arr = [1,2,3,4,5];
arr.length = 7;
console.log( arr2bin(arr) );
console.log( arr2bin([1,2,3,4,5,6]) );
console.log( arr2bin([1,2,3,5,6]) );
console.log( arr2bin([6]) );
假设:你给出的数组a
是从小到大排列且无重复。
var a = [1, 2, 3, 5, 6];
var results = Array.from({length: a[a.length - 1]}, (v, k) => 0);
a.forEach(item => results[item - 1] = 1);
大概是这样,手机写的没有测试。
不优雅的一段代码:
function wtf(arr, maxLength) {
var result = [];
for(var i = 1, j = 0;i <= maxLength; i++) {
if (arr[j] !== i || j >= i) {
result.push(0);
} else if (arr[j] === i) {
result.push(1);
j++;
}
}
return result;
}
写了段代码应该满足题主的要求了
https://jsfiddle.net/taoguo/kfqhf7un/
同学语文不好啊
这题要保证 a 中元素无重复吧
如果有上面这个条件,可以用一个哈希表记录 arr 中出现了什么元素。
https://jsfiddle.net/hsfzxjy/92qxer9z/
let a = [1,2,3,4,5,6];
function check(arr) {
let map = {};
arr.map((item) => map[item] = true);
return a.map((item) => map[item] ? 1 : 0);
}
console.log(check([6]));
同志,你这个表述不怎么清晰啊,我来列下我看完后的疑问:
"现在有个6个数组" - 哪6个数组啊?
"如果是1.2.3.5.6,会得到一个数组1.1.1.0.1.1" - 两个数组长度不一样,是什么逻辑使得后面的数组长度是6
的?
"如果是6,会得到一个数组0.0.0.0.0.1" - 这段更神,从一个字符串生成一个长度为6
的数组,还是老问题,逻辑是什么?
"或者有个7个长度的数组 里面会有1.2.3.4.5" - 到底是7个长度不知道的数组?还是一个长度是7的数组?
这些问题基本导致回答起来比较难