xgqfrms™, xgqfrms® : xgqfrms's offical website of cnblogs! xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

js Array.fill All In One

js Array.fill All In One

Array.fill

fill 必须的数组不可以为空;

// ❌ empty array
[].fill('👻');


[1, 2, 3].fill('👻');
//  ['👻', '👻', '👻']

Array(3).fill('🚀');
// ['🚀', '🚀', '🚀']

fill 是遍历数组进行元素替换, 填充 emoji 不会出问题;✅

[1, 2, 3].fill('👻✅');
// ['👻✅', '👻✅', '👻✅']

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill

js string padStart & padEnd

padStart 和 padEnd 操作的是字符串,所以字符串可以为空; 但是需要手动把字符串转换成数组;

``.padStart(3, '6');
// '666'

``.padStart(6, '6');
// '666666'


// 换成数组 ✅
Array.from(``.padStart(6, '6'));
// ['6', '6', '6', '6', '6', '6']

// 换成数组 ✅
[...``.padStart(6, '6')];
// ['6', '6', '6', '6', '6', '6']

``.padEnd(3, '6');
// '666'

``.padEnd(6, '6');
// '666666'

// 换成数组 ✅
Array.from(``.padEnd(6, '6'));
// ['6', '6', '6', '6', '6', '6']

// 换成数组 ✅
[...``.padEnd(6, '6')];
// ['6', '6', '6', '6', '6', '6']

emoji bug

padStart 和 padEnd 操作的是字符串,由于 unicode 的 emoji 占用的 字节大小不同,可能会出现填充部分字节的 bug; ❌

``.padEnd(6, '👻');
// '👻👻👻'

// 👻 占用两个字节,出现填充半个的 bug ❌
``.padEnd(3, '👻');
// '👻\uD83D'


`👻`.length
2
`🇨🇳`.length
4
`✅`.length
1
`👨🏻‍💻`.length
7
`🕵️‍♂️`.length
6
`📦`.length
2
`⚡️`.length
2
`👨🏻‍💻`.length
7

padStart 和 padEnd 操作的是字符串, 返回值是字符串,需要手动转换成 Number


[...``.padEnd(26, 0)];
// ['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0']

[...``.padEnd(26, 0)].map(i => 0);
// [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

[...``.padEnd(26, 0)].map(Number);
// [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


Array(26).fill(0);
// [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd

demo

/**
 * @param {string} s1
 * @param {string} s2
 * @return {boolean}
 */
var checkInclusion = function (s1, s2) {
    const len1 = s1.length, len2 = s2.length;
    if (len1 > len2) return false;

    const count = Array(26).fill(0);
    for (let i = 0; i < len1; i++) {
        count[s1.charCodeAt(i)-97]++;
        count[s2.charCodeAt(i)-97]--;
    }
    if (!count.some(e => e !== 0)) return true;

    for (let i = len1; i < len2; i++) {
        count[s2.charCodeAt(i)-97]--;
        count[s2.charCodeAt(i-len1)-97]++;
        if (!count.some(e => e !== 0)) return true;
    }
    return false;
};

https://leetcode.com/problems/permutation-in-string/discuss/1540759/JavaScript-solution-sliding-window-and-26-char-frequency-array

refs



©xgqfrms 2012-2020

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!


posted @ 2022-08-06 18:23  xgqfrms  阅读(32)  评论(1编辑  收藏  举报