Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何通过JS中的第一个单词合并数组中的元素?可能吗?_Javascript_Arrays - Fatal编程技术网

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']