-
Notifications
You must be signed in to change notification settings - Fork 836
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
第六题:实现一个 chunk 函数 #8
Comments
function chunk(input, size) {
size = Math.max(toInteger(size), 0)
if (!Array.isArray(input)) {
return []
}
if (size < 1) {
return []
}
const n = input.length
const result = []
let start = 0
while (start < n) {
result.push(input.slice(start, start + size))
start += size
}
return result
} 可以参考lodash源码 |
const chunk = (arr, len) => arr.reduce((pre, cur, index) => {
if (index % len === 0) {
pre.push([cur])
return pre
}
const temp = pre[pre.length - 1]
temp && temp.push(cur)
return pre
}, []) |
function chunk(arr, len) {
if (len === 0) return []
return arr.reduce((prev, item, index) => {
const value = Math.floor(index / len),
remainder = index % len
remainder === 0 ? prev.push([item]) : prev[value].push(item)
return prev
}, [])
} |
const _ = {};
_.chunk = function (arr, num) {
const res = [];
return step(res, arr, 0, num);
};
function step(res, arr, index, num) {
const len = arr.length;
if (index >= len || num <= 0) return res;
const chunk = [];
for (let i = index; i < index + num; ++i) {
arr[i] && chunk.push(arr[i]);
}
res.push(chunk);
// console.log(res);
return step(res, arr, index + num, num);
} |
function chunk(arr = [], size) {
let result = [];
if (size === 0) return result;
let len = arr.length;
if (size >= len) return arr;
if (size > Math.ceil(len / 2)) return [arr.slice(0, size), arr.slice(size)];
for (let i = 0; i < len; i++) {
let index = i + size - 1;
if (index >= len) {
result.push(arr.slice(i));
break;
} else {
result.push(arr.slice(i, index + 1));
}
i = index;
}
return result;
} |
const chunk = (array, size) => { |
//_.chunk(array, size)
//根据size参数将数组分组,size是每一组的长度。如果数组不能均分,最后一组就会包含剩下的元素。
let _ = {}
_.chunk = function (arr,size) {
if(arr.length == 0||!size) return[]
if(arr.length<= size) return arr
let result = []
while (arr.length){
result.push(arr.splice(0,size))
}
return result
} |
`
` |
|
let _={};
_.chunk=function(arr,length){
let result=[];
let num=Math.ceil(arr.length/length);
let index=0;
for(let i=0;i<num;i++){
console.log(index,num,arr,length,arr.slice(index,index+length))
result.push(arr.slice(index,index+length));
index=index+length;
}
return result
} |
function chunk (arr, size) {
if (!size) return arr
const len = Math.ceil(arr.length / size)
const ret = []
let first = 0
let end = size
for (let i = 0; i < len; i++) {
const temp = arr.slice(first, end)
first = size
end = first + size + 1
ret.push(temp)
}
return ret
} |
const _ = { |
|
|
function chunk(arr, num) {
if (num === 0) return [];
if (Array.isArray(arr) && typeof num === "number") {
let result = [];
let i = 0;
while (i < arr.length) {
result.push(arr.slice(i, i + num));
i += num;
}
return result;
} else {
console.log("params type error");
}
} |
function chunk(arr, number) {
if (number < 0 || arr.length === 0) {
return arr;
}
const total = arr.length / number;
const newArr = [];
for (let i = 0; i < total; i++) {
console.log(arr.slice(i * number, (i + 1) * number))
newArr.push(arr.slice(i * number, (i + 1) * number));
}
return newArr
} |
|
function chunk(array, size) {
if (size == 0) {
return [];
}
let flag = -1;
let arr = [];
for (let i = 0; i < array.length; i++) {
if (i % size == 0) {
arr[++flag] = [];
}
arr[flag].push(array[i]);
}
return arr;
}
console.log(chunk(["a", "b", "c", "d"], 2));
console.log(chunk(["a", "b", "c", "d"], 3));
console.log(chunk(["a", "b", "c", "d"], 5));
console.log(chunk(["a", "b", "c", "d"], 0)); |
|
function chunk(arr, length) {
if (length <= 0) return [];
const res = arr.reduce((prev, a) => {
const l = prev.length;
if (l === 0 || prev[l - 1].length === length) {
prev.push([a]);
} else {
prev[l - 1].push(a);
}
return prev;
}, []);
return res;
} |
function _chunk(input, size = 1) {
if (!Array.isArray(input)) return;
if (input.length === 0 || size < 1) return [];
const newLength = Math.ceil(input.length / size);
const result = new Array(newLength);
for (let i = 0; i < newLength; i++) {
result[i] = input.slice(size * i, size * (i + 1));
}
return result;
} |
预先解释一下,chunk 函数输入两个值,第一个:待分块的数组,第二个:每块的长度。该函数将数组按照长度分块,如果剩余的元素数量不足一块,则按照一块处理。 我是百度了之后才了解这个函数的……题目中给的例子需要加一个: _.chunk([1,2,3,4,5],2) 这样就完整了 看评论区都是直接上来就给答案,我确实很佩服…… |
|
let _ = {
chunk: function (arr, size) {
if (size === 0) {
return [];
}
const nums = Math.ceil(arr.length / size);
const res = [];
for (let i = 0; i <= nums - 1; i++) {
res.push(arr.slice(i * size, (i + 1) * size));
}
return res;
}
};
/**
* @param input
* @param size
* @returns {Array}
*/
console.log(_.chunk(['a', 'b', 'c', 'd'], 2));
// => [['a', 'b'], ['c', 'd']]
console.log(_.chunk(['a', 'b', 'c', 'd'], 3));
// => [['a', 'b', 'c'], ['d']]
console.log(_.chunk(['a', 'b', 'c', 'd'], 5));
// => [['a', 'b', 'c', 'd']]
console.log(_.chunk(['a', 'b', 'c', 'd'], 0));
// => [] |
function chunk(input, size) {
if (size == 0) {
return [];
}
let newArr = [];
let n = Math.ceil(input.length / size);
for (let i = 0; i < n; i++) {
newArr.push(input.slice(size * i, size * (i+1)));
}
return newArr;
} console.log(chunk(["a", "b", "c", "d"], 0));
console.log(chunk(["a", "b", "c", "d"], 1));
console.log(chunk(["a", "b", "c", "d"], 2));
console.log(chunk(["a", "b", "c", "d"], 3));
console.log(chunk(["a", "b", "c", "d"], 4));
console.log(chunk(["a", "b", "c", "d"], 5)); |
第一个参数是数组 第二参数分成几份 function chunk(arr, num){ |
let myChunk = function(input, size) {
if (!Array.isArray(input)) return;
let result = [];
if (size === 0) return [];
if (size < input.length) {
result.push(input.slice(0, size), input.slice(size))
} else {
result.push(input.slice(0, size))
}
return result;
} |
let a=['a','b','c','d']; } |
const _ = { |
// chunk函数根据size参数将第一个array数组参数分组,剩下的如果不足则size个数也会被分成一组
// size如果为0则返回空数组
let _ = {}
_.chunk = function (arr,size=0) {
if(!(arr instanceof Array)) return console.log('请传入一个数组!')
if(arr.length === 0) return[]
if(arr.length<= size) return arr
let result = []
while (arr.length){
result.push(arr.splice(0,size))
}
return result
} |
var _ = {
chunk: (arr, size) =>{
if (size === 0) {
return [];
}
var filter = arr.filter((item, index) =>{
return index < size
});
return size >= arr.length
? [filter]
: [filter, arr.slice(size, arr.length)]
}
}
console.log(_.chunk(['a', 'b', 'c', 'd'], 2));
console.log(_.chunk(['a', 'b', 'c', 'd'], 3));
console.log(_.chunk(['a', 'b', 'c', 'd'], 5));
console.log(_.chunk(['a', 'b', 'c', 'd'], 0)); |
function chunk(arr,num){
if(!Array.isArray(arr)){
throw new Error("请传入数组");
}
const len = arr.length;
if(num <= 0){
return []
}
const r1 = arr.slice(0,num)
const r2 = arr.slice(num,len);
return r2.length > 0 ? [r1,r2] : [r1]
} |
function chunk(nums, count) {
if (Array.isArray(nums) && nums.length > 0) {
if (count === 0) return [];
let result = [], start = 0;
while (nums.length > start) {
result.push(nums.slice(start, (start += count)));
}
return result;
} else {
return false;
}
} |
function chunk(arr, size) {
if (arr.length === 0 || size === 0) {
return [];
}
let resArr = [];
arr.forEach((item, index) => index % size === 0 ? resArr.push([item]) : resArr[resArr.length - 1].push(item));
return resArr;
} |
splice能改变原数组利用这个特性去实现的
|
chunk 函数接受两个参数:
|
|
function fn(){
// 感觉像纯考数学题,考察处理边界问题
this.chunk=function(array,number){
let newArray=[];
if(number===0){
return newArray;
}
array.forEach((item,index)=>{
if(!array[index*number]) return
newArray.push(array.slice(index*number,(index+1)*number))
})
console.log(newArray)
return newArray
}
}
const demoFn=new fn()
demoFn.chunk(['a', 'b', 'c', 'd'], 4) |
那你个改变原数组了 |
const chunk = (input, size)=>{
if(!input || !Array.isArray(input) || size<=0)
return [];
// if(size > input.length) return input;
const result = [];
let childArr = [];
input.forEach((item,index)=>{
if((index + 1)%size === 1){
childArr = []
}
childArr.push(item)
if((index + 1)%size === 0 || index===input.length-1){
result.push(childArr)
}
})
return result
} const chunk1 = (input, size)=>{
if(!input || !Array.isArray(input) || size<=0)
return [];
const result = [];
let start = 0;
while(start<input.length){
result.push(input.slice(start, start+size));
start += size
}
console.log(result)
return result;
} |
function chunk(arr, count) {
if (!Array.isArray(arr)) {
console.error(`${arr} must be array`);
return;
}
if (typeof count !== 'number') {
console.error(`${count} must be number`);
return;
}
if (count === 0) {
return [];
}
const len = arr.length;
const result = [];
for(let i = 0; i < Math.ceil(len / count); i++) {
result.push(arr.splice(0, count))
}
return result;
} |
不修改原数组 splice
const chunk2 = (input, size)=>{
if(!input || !Array.isArray(input) || size<=0)
return [];
const result = [];
let start = 0;
const orginArr = [...input];
while(orginArr.length){
result.push(orginArr.splice(0, size));
}
console.log(result)
return result;
} |
const chunk = (arr, chunkSize) => arr.reduce((pre, cur, index) => index % chunkSize === 0 ? |
const chunk = (array, size) => {
if (!array || !Array.isArray(array) || size < 1) return []
return array.reduce((prev, curr, index) => {
if (index % size === 0) {
prev.push([curr])
return prev
}
const temporary = prev[prev.length - 1]
temporary && temporary.push(curr)
return prev
}, [])
} |
const chunk = (list, ln) => {
if (ln <= 0) return [];
const result = [];
list.forEach((item, index) => {
const mol = index % ln, idx = Math.floor(index / ln);
if (mol === 0) result[idx] = [];
result[idx].push(item);
});
return result;
}; |
|
function chunk(arr, len) {
if(len === 0) return [];
let [start, end, res] = [0, len, []];
while(start < arr.length) {
res.push(arr.slice(start, end));
[start, end] = [end, end+len];
}
return res;
} |
function chunk(arr, step) { |
const _chunk = (chunker, size) => {
let result = [];
if (size === 0) return [];
while (chunker.length > size) {
const s = chunker.splice(0, size);
result = [...result, s];
}
if (chunker.length < size) return [...result, chunker];
}; |
const _ = {
chunk(list, size) {
if(size < 1) return []
const arr = [...list]
const target = []
while (arr.length){
target.push(arr.splice(0, size))
}
}
} |
chunk=(arr,length)=>{
let i =0
let arr1= []
while(i<arr.length){
arr1.push(arr.slice(i,i+length));
i=i+=length
}
return arr1
} |
|
const chunk = (arr, n) => {
let len = arr.length;
if (len === 0 || n === 0) return [];
let res = [];
let g = Math.floor(len / n);
while(g) {
res.push(arr.splice(0, n));
g--;
}
return res;
} |
const _ = {}
_.chunk = (arr, size) =>
arr.reduce((prev,cur,idx)=> {
idx%size == 0 ? prev.push([cur]) : prev[prev.length-1].push(cur)
return prev
}, [])
console.log(_.chunk([1,2,3,4,5],2)) // [ [ 1, 2 ], [ 3, 4 ], [ 5 ] ]
console.log(_.chunk([1,2,3,4,5],4)) // [ [ 1, 2, 3, 4 ], [ 5 ] ] |
function chunk(array = [], size = 0) {
return size === 0 ? [] : new Array(Math.ceil(array.length / size)).fill(0).map((item, index) => {
return array.slice(index * size, (index + 1) * size);
});
} |
去答题
新建了一个大厂真题每日打卡群,有意愿学习打卡的再进,群已达扫码上线,请加好友拉你进群。
The text was updated successfully, but these errors were encountered: