整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JavaScript-如何从一个数组中删除一个特定的

JavaScript-如何从一个数组中删除一个特定的项目?

rray.prototype.indexOf()

用indexOf找到你想删除的数组元素的索引,然后用splice删除该索引。

const array=[2, 5, 9];

console.log(array);

const index=array.indexOf(5);
if (index > -1) {
  array.splice(index, 1);
}

// array=[2, 9]
console.log(array); 

splice的第二个参数是要移除的元素的数量。注意,splice修改了原地的数组,并返回一个包含被移除的元素的新数组。

为了完整起见,这里有一些函数。第一个函数只删除单一的出现(即从[2,5,9,1,5,8,5]中删除5的第一个匹配),而第二个函数则删除所有出现的情况。

function removeItemOnce(arr, value) {
  var index=arr.indexOf(value);
  if (index > -1) {
    arr.splice(index, 1);
  }
  return arr;
}

function removeItemAll(arr, value) {
  var i=0;
  while (i < arr.length) {
    if (arr[i]===value) {
      arr.splice(i, 1);
    } else {
      ++i;
    }
  }
  return arr;
}
// Usage
console.log(removeItemOnce([2,5,9,1,5,8,5], 5))
console.log(removeItemAll([2,5,9,1,5,8,5], 5))

在TypeScript中,这些函数可以添加类型参数。

function removeItem<T>(arr: Array<T>, value: T): Array<T> { 
  const index=arr.indexOf(value);
  if (index > -1) {
    arr.splice(index, 1);
  }
  return arr;
}


Array.prototype.filter()

家好,很高兴又见面了,我是"高级前端?进阶?",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。

什么是 UnCSS

UnCSS 是一个从样式表中删除未使用的 CSS 的工具,可以跨多个文件工作,并支持 Javascript 注入的 CSS。

UnCSS 删除未使用规则的过程如下:

  • HTML 文件由 jsdom 加载并执行 JavaScript。
  • 所有样式表均由 PostCSS 解析。
  • document.querySelector 过滤掉 HTML 文件中找不到的选择器。
  • 其余规则将转换回 CSS。

但是使用 Uncss 需要注意以下几点:

  • UnCSS 不能在非 HTML 页面上运行,例如:模板或 PHP 文件。 如果开发者需要针对模板运行 UnCSS,应该从模板生成示例 HTML 页面,并在这些生成的文件上运行 uncss; 或者运行一个实时的本地开发服务器,并将 uncss 指向该服务器。
  • UnCSS 仅运行在页面加载时运行的 Javascript。 它不会(也不能)处理在用户交互(如按钮单击)上运行的 Javascript。 必须使用 ignore 选项来保留 Javascript 在用户交互时添加的类。

目前 uncss 在 Github 上通过 MIT 协议开源,有超过 9.3k 的 star,194k 的项目依赖量,是一个值得关注的前端开源项目。

如何使用 UnCSS

下面是在 Node.js 环境中使用 uncss 的示例:

var uncss=require('uncss');
var files=['my', 'array', 'of', 'HTML', 'files', 'or', 'http://urls.com'],
  options={
    banner: false,
    csspath: '../public/css/',
    htmlroot: 'public',
    ignore: ['#added_at_runtime', /test\-[0-9]+/],
    ignoreSheets: [/fonts.googleapis/],
    inject: function (window) {
      window.document
        .querySelector('html')
        .classList.add('no-csscalc', 'csscalc');
    },
    jsdom: {
      userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X)',
    },
    media: ['(min-width: 700px) handheld and (orientation: landscape)'],
    raw: 'h1 { color: green }',
    report: false,
    strictSSL: true,
    stylesheets: [
      'lib/bootstrap/dist/css/bootstrap.css',
      'src/public/css/main.css',
    ],
    timeout: 1000,
    uncssrc: '.uncssrc',
    userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X)',
  };
uncss(files, options, function (error, output) {
  console.log(output);
});
/* Look Ma, no options! */
uncss(files, function (error, output) {
  console.log(output);
});
/* Specifying raw HTML */
var rawHtml='...';
uncss(rawHtml, options, function (error, output) {
  console.log(output);
});

值得一提的是,UnCSS 还可以与其他 JavaScript 构建系统结合使用,例如: Grunt、Broccoli 或 Gulp,只需要安装特定的库即可。

  • grunt-uncss
  • gulp-uncss
  • broccoli-uncss

在 CLI 环境中使用命令如下:

Usage: uncss [options] <file or URL, ...>
    e.g. uncss https://getbootstrap.com/docs/3.3/examples/jumbotron/ > stylesheet.css

Options:

  -h, --help                            output usage information
  -V, --version                         output the version number
  -i, --ignore <selector, ...>          Do not remove given selectors
  -m, --media <media_query, ...>        Process additional media queries
  -C, --csspath <path>                  Relative path where the CSS files are located
  -s, --stylesheets <file, ...>         Specify additional stylesheets to process
  -S, --ignoreSheets <selector, ...>    Do not include specified stylesheets
  -r, --raw <string>                    Pass in a raw string of CSS
  -t, --timeout <milliseconds>          Wait for JS evaluation
  -H, --htmlroot <folder>               Absolute paths' root location
  -u, --uncssrc <file>                  Load these options from <file>
  -n, --noBanner                        Disable banner
  -a, --userAgent <string>              Use a custom user agent string
  -I, --inject <file>                   Path to javascript file to be executed before uncss runs
  -o, --output <file>                   Path to write resulting CSS to

请注意,可以将本地文件路径(由 glob 处理)和 URL 传递给程序。

  • banner(布尔值,默认值:true):是否应在已处理 CSS 中的每个文件块之前添加banner。
  • csspath(字符串):CSS 文件与 HTML 文件相关的路径。 默认情况下,UnCSS 使用 <link rel="stylesheet" href="path/to/file.css"/> 中指定的路径。
  • htmlroot(字符串):项目根目录所在的位置。 例如,如果 HTML 引用具有根相对 URL 的本地文件,即 href="/css/style.css"则很有用。
  • ignore (string[]):提供不应被 UnCSS 删除的选择器列表。 例如,通过用户与页面交互(悬停、单击)添加的样式,因为 UnCSS 尚无法检测到这些样式。 文字名称和正则表达式模式都可以识别。 否则,可以在特定选择器之前添加注释:
/* uncss:ignore */
.selector1 {
    /* this rule will be ignored */
}
.selector2 {
    /* this will NOT be ignored */
}
/* uncss:ignore start */
/* all rules in here will be ignored */
/* uncss:ignore end */
  • 支持更多配置,包括:ignoreSheets、inject、jsdom、media、raw、report、strictSSL、stylesheets、timeout、uncssrc等参考文末资料。

参考资料

https://github.com/uncss/uncss

https://m.youtube.com/watch?v=DX7McYRGJ8o

https://uncss-online.com/

lt;div class="aa">aa</div>

<div class="bb">bb</div>

<div class="aa">aa</div>

<div class="fuClass"><h4 id="Title">jiajia</h4></div>

<ul>

<li><a href="/" class="delete second">11</a></li>

<li>22</li>

<li>33</li>

</ul>

const lis=document.querySelectorAll("li");

const list=document.querySelector("ul");

//第一种删除方法

//lis[0].remove();

//第二种删除方法

//list.removeChild(lis[1]);

//class && attr

const firstLi=document.querySelector("li:first-child");

const link=firstLi.children[0];

//a 类

let val;

val=link.className;

val=link.classList;

// val=link.classList[0];

link.classList.add('test');

link.classList.remove('test');

//a 属性

val=link.getAttribute('href');

val=link.setAttribute('href','http://www.baidu.com');

link.setAttribute('title','百度');

link.removeAttribute('title');

val=link.hasAttribute('title');

console.log(val)