Javascript 如何通过JS中的第一个单词合并数组中的元素?可能吗?
我有以下数组Javascript 如何通过JS中的第一个单词合并数组中的元素?可能吗?,javascript,arrays,Javascript,Arrays,我有以下数组 ['.some_class &.green_mod','.some_class &.red_mod','another_class &.green_mod','another_class &.orange_mod'] 我想从中获取此数组: ['.some_class &.green_mod &.red_mod','another_class &.green_mod &.orange_mod'] 可能吗?您可以尝试:
['.some_class &.green_mod','.some_class &.red_mod','another_class &.green_mod','another_class &.orange_mod']
我想从中获取此数组:
['.some_class &.green_mod &.red_mod','another_class &.green_mod &.orange_mod']
可能吗?您可以尝试:
var preArr = ['.some_class &.green_mod', '.some_class &.red_mod', 'another_class &.green_mod', 'another_class &.orange_mod'];
var newArr = [];
preArr.forEach(function (item) {
var has = false;
var preWords = item.split('&');
for (var i = 0; i < newArr.length; ++i) {
var newWords = newArr[i].split('&');
if (newWords[0] == preWords[0]) {
has = true;
for (var j = 0; j < preWords.length; ++j) {
if (newWords.indexOf(preWords[j]) < 0) {
newWords.push(preWords[j]);
}
}
newArr[i] = newWords.join('&');
}
}
if (!has) {
newArr.push(item);
}
});
console.log(newArr);
var-prear=['.一些类和.green\u mod','.一些类和.red\u mod','另一个类和.green\u mod','另一个类和.orange\u mod'];
var newArr=[];
预付款(功能(项目){
var=false;
var preWords=项目分割('&');
对于(变量i=0;i
var测试=(函数(){
var fmap1=函数(e){返回e.trim().split(/\s+/);};
var fmap2=函数(e){返回e.join(“”;};
var fsort=函数(e1,e2){返回e1[0]==e2[0]?0:e1[0]>e2[0]?1:-1;};
返回功能测试(a){
var a1=a.map(fmap1).sort(fsort);
var s,a2=[];
对于(变量i=0,l=a1.length;i
这似乎对我有用:
var arr = ['.some_class &.green_mod','.some_class &.red_mod','another_class &.green_mod','another_class &.orange_mod'];
var obj = {};
var finalArr = [];
for(var i=0,c=arr.length;i<c;i++)
{
var parts = arr[i].split(' ');
var key = parts[0];
if(!obj[key]) obj[key] = [];
obj[key].push(parts.slice(1).join(' '));
}
var keys = Object.keys(obj);
for(var i=0,c=keys.length;i<c;i++)
{
var key = keys[i];
finalArr.push(key+' '+obj[key].join(' '))
}
console.log(finalArr);
var arr=['.一些类和.green\u mod','.一些类和.red\u mod',另一个类和.green\u mod',另一个类和.orange\u mod'];
var obj={};
var finalArr=[];
对于(var i=0,c=arr.length;i解决方案,适用于键+分隔符+值这样的数据,您可以确保键中没有重复,或者不关心值是否重复
// maping function that treats part before separator as key and saves incremetaly
// all values under that key (duplicated vales are possible)
// only one separator per input entry is allowed
function mapFun (el, obj, separator) {
var e = el.split(separator);
var key = e[0];
var val = e[1];
obj[key] = obj[key] ? obj[key] + separator + val : separator + val;
}
function combineClasses (arr) {
var result = [];
var separator = ' &';
var obj = Object.create(null); // create empty object without any properties or inheritance chain
for (var i=0; i<arr.length; i++) {
mapFun(arr[i], obj, separator);
}
for (var p in obj) {
result.push (p + obj[p]);
}
return result;
}
combineClasses(arr);
如果输入结构的定义如上所述,那么它很可能是可能的,是的;但是逻辑是什么?你想做什么?我写了一个函数,它获取页面上的所有元素,并将带有css选择器的代码放入我的scss文件)它是带有“&”符号的类的mods
// maping function that treats part before separator as key and saves incremetaly
// all values under that key (duplicated vales are possible)
// only one separator per input entry is allowed
function mapFun (el, obj, separator) {
var e = el.split(separator);
var key = e[0];
var val = e[1];
obj[key] = obj[key] ? obj[key] + separator + val : separator + val;
}
function combineClasses (arr) {
var result = [];
var separator = ' &';
var obj = Object.create(null); // create empty object without any properties or inheritance chain
for (var i=0; i<arr.length; i++) {
mapFun(arr[i], obj, separator);
}
for (var p in obj) {
result.push (p + obj[p]);
}
return result;
}
combineClasses(arr);
function mapFun (el, separator, obj) {
var parts = el.split(separator);
var key = parts[0];
if (!obj[key]) {
obj[key] = Object.create(null);
}
for (var i=1; i<parts.length; i++) {
obj[key][parts[i]] = null;
}
}
function combineClasses (arr) {
var result = [];
var separator = ' &';
var obj = Object.create(null); // create empty object without any properties
for (var i=0; i<arr.length; i++) {
mapFun(arr[i], separator, obj);
}
for (var p in obj) {
var values = Object.keys(obj[p]).join(separator);
result.push (p + separator + values);
}
return result;
}
combineClasses(arr);
var arr = ['.some_class &.green_mod','.some_class &.red_mod','another_class &.green_mod','another_class &.orange_mod']