在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答
糖豆豆 回答

使用 ES5 內(nèi)置數(shù)組函數(shù) + 箭頭函數(shù)隱藏 for 循環(huán)細節(jié)

packageInfoList.forEach(package => {
    var newPackage = ConfigData.getGoods(true, package.id);
    package.packageTag.forEach(tag => {
        var newTag = newPackage.packageTag.find(t => t.id === tag.id);
        if(!newTag) return;
        tag.goods.forEach(goods => {
            var newGoods = newTag.goods.find(g => g.id === goods.id);
            if(!newGoods) return;
            var flag = updateGoodAttr(goods, newGoods);
        });
    });
});

updateGoodAttr = (goods, newGoods) => {
    goods.attr.forEach(attr => {
        var newAttr = newGoods.attr.find(a => a.id === attr.id)
        attr.option.filter(taste => !!taste.select).foreach(taste => {
            var newTasteOption = newAttr.option.find(t => t.id === taste.id);
            if(newTasteOption) {
                newTasteOption.select = taste.select;
            }
        });
    });
}

提取重復的數(shù)組比對邏輯

已經(jīng)省去里很多迭代的下角標處理里,但是代碼還是很啰嗦,頻繁重復對兩個數(shù)組進行元素比較。干脆把這個邏輯提取出來:

var match = (arr1, arr2, identifier, process) => arr1.forEach(item1 => 
    arr2.forEach(item2 => identifier(item1) === identifier(item2) && process(item1, item2))
);

傳入兩個數(shù)組,對數(shù)組元素的每個元素使用 identifier 獲取 id,如果比較成功,則調(diào)用 process 函數(shù)處理這兩個元素。例子中 identifier 都一樣,即 item => item.id.

var ID = item => item.id;

var processPackage = (p1, p2) => match(p1.packageTag, p2.packageTag, ID, processTag);

var processTag = (tag1, tag2) => match(tag1.goods, tag2.goods, ID, processGoods);

var processGoods = (goods1, goods2) => match(goods1,attr, goods2.attr, ID, processAttr);

var processAttr = (attr1, attr2) => match(attr1.options.filter(taste => !!taste.select), attr2.options, ID, processTaste);

var processTaste = (taste1, taste2) => taste2.select = taste1.select


var packageInfoList = [...], configPackageList = [...];

match(packageInfoList, configPackageList, ID , processPackage);

消除重復調(diào)用

目前代碼中還存在重復地調(diào)用 match 函數(shù),調(diào)用邏輯相似而重復,如果能把這塊抽出來就好了。我們再提取一個函數(shù),用來構(gòu)造 processXXXprocessAttr比較特殊,對兩邊取子屬性的邏輯不一樣,所以提取的這個函數(shù)需要考慮 processAttr 的需求。

var subProcess = ([s1, s2], id, process) => (i1, i2) => match(s1(i1), s2(i2), id, process)

var fixSelector = f => Array.isArray(f) ? f : [f, f]
var processTaste = (taste1, taste2) => taste2.select = taste1.select
var processAttr = subProcess(
    fixSelector([item => item.options.filter(taste => !!taste.select), item => item.options]), 
    ID,
    processTaste
)
var processGoods = subProcess(fixSelector(item => item.attr), ID, processAttr)
var processTag = subProcess(fixSelector(item => item.goods), ID, processGoods)
var processPackage = subProcess(fixSelector(item => item.tag), ID, processTag)


var ID = item => item.id
match(
    packageInfoList,
    configPackageList,
    ID,
    processPackage
);

最后一步調(diào)用其實等價于:

subProcess(fixSelector([() => packageInfoList, () => configPackageList], ID, 
    subProcess( fixSelector(package => package.tag), ID
        subProcess( fixSelector(tag => tag.goods), ID,
            subProcess( fixSelector(goods => goods.attr), ID
                subProcess( fixSelector([attr => attr.options.filter(taste => !!taste.select), attr => attr.options]), ID
                    processTaste
                )
            )   
        )          
    )
)()

把掉套函數(shù)調(diào)用拉平試試?試想如下代碼:

f(a, f(b, f(c, f(d, e)))))

// 等價于

[a,b,c,d,e].reduceRight((prev, item) => f(item, prev))

于是有:

var match = (arr1, arr2, identifier, process) => arr1.forEach(item1 => 
    arr2.forEach(item2 => identifier(item1) === identifier(item2) && process(item1, item2))
)
var subProcess = ([s1, s2], id, process) => (i1, i2) => match(s1(i1), s2(i2), id, process)
// 為了傳遞 selector 的時候可以單獨給一個函數(shù)
var fixSelector = f => Array.isArray(f) ? f : [f, f]
var reducer = (prev, [selector, identifier]) => subProcess(fixSelector(selector), identifier, prev)
var process = (...items) => items.reduceRight(reducer)()


// 調(diào)用
process(
    [ [() => packageInfoList, () => configPackageList], ID], // 初始數(shù)據(jù)
    [ package => package.tag, ID], // 根據(jù)上面一項的元素,返回需要繼續(xù)比對的下一層數(shù)據(jù)
    [ tag => tag.goods, ID], // 把ID當參數(shù)在每一層傳進來是為了支持不同層取 ID 的方式不同
    [ goods => goods.attr, ID], // 再深也不怕,無非多一個參數(shù)
    // 支持兩邊不同的取值方法
    [ [attr => attr.options.filter(taste => !!taste.select), attr => attr.options], ID], 
    // 最后一個函數(shù)就是你處理深處數(shù)據(jù)的地方啦
    (taste1, taste2) => taste2.select = taste1.select 
)

雖然調(diào)用的時候挺漂亮的,但是有點繞。。。

淺淺 回答

https://jsrun.net/bJiKp/edit
測試發(fā)現(xiàn)是變得。可以自己點進去看看

情殺 回答

[]表示字符集,表示取該集合里面的任意一個字符,[\A-\¥]里面的-表示范圍,取的是-兩邊字符的Unicode值,可以通過charCodeAt獲取字符的Unicode值,如下:

"A".charCodeAt(0) // 65
"¥"chartCodeAt(0) // 65509

所以字符的取值范圍是Unicode值為65-65509之間的任意字符,用十六進制表示為0041-FFE5。
大部分的中文其實都是在這個范圍之內(nèi)的,百科鏈接

  • CJK Compatibility (3300–33FF)

  • CJK Compatibility Forms (FE30–FE4F)

  • CJK Compatibility Ideographs (F900–FAFF)

所以可以用上面的正則匹配中文,當然這個正則的匹配范圍和中文的匹配范圍并不是完全對應的,因為該正則的范圍比常見中文的范圍要大,大小寫字母也是包含其中的。另外,還有一些中文如CJK Compatibility Ideographs Supplement (2F800–2FA1F)則不在該正則范圍之內(nèi),所以這個就需要你自己去權(quán)衡正則要精確匹配到什么程度。

入她眼 回答

建議用python腳本編寫,通過multiporcessingthreadingasyncio,調(diào)用requests模塊的相關(guān)方法(比如post之類)

凹凸曼 回答

chrome是好的,真機不行,有用別的手機或者手機瀏覽器換一個試試嗎?我倒是遇到過fixed定位再ios下的問題,你這個我估計還得看代碼才能解決,

汐顏 回答

因為可以使用前端框架一些方案解決前端開發(fā),但是渲染放在前端,搜索引擎是解析執(zhí)行不了的
你的那種方案,并不可行,這樣load的頁面返回本質(zhì)上還是在前端渲染
搜索引擎只認拿到的,并不關(guān)你會變成怎樣。
那么就簡化成只要拿到處理后的html即可
例如build出前端項目 加一層渲染 然后返回渲染后的文件
例如ssr模塊,犧牲一些東西。

過客 回答

簡單的說:會的

具體可以參見: https://docs.gradle.org/curre...

尐懶貓 回答

自己封裝一個方法

function ajax(config, callbackS, callbackF) {
    // 設(shè)置常用的默認值
    var url = config.url || '/';
    var method = config.method || 'GET';
    var async = config.async === undefined ? true : config.async;
    var contentType = config.contentType || 'application/x-www-form-urlencoded';
    var header = config.header || {};
    var data = config.data;

    // 創(chuàng)建XMLHttpRequest對象
    var xhr = new XMLHttpRequest();

    // 初始化請求
    xhr.open(method, url, async);

    // 設(shè)置header的默認值
    xhr.setRequestHeader('Content-Type', value);

    // 設(shè)置其它header
    for (var item in header) {
        xhr.setRequestHeader(item, header[item]);
    }

    // 發(fā)送請求
    xhr.send(data);

    // 處理響應
    xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
            if (xhr.status == 200) {
                callbackS && callbackS(xhr.responseText);
            }
            else {
                callbackF && callbackF(xhr.status);
            }
        }
    }
}
夕顏 回答

input頁面加載后調(diào)用驗證

this.$refs.TrafModeObj.validateField("chkTrafModeObj");
毀憶 回答

multiprocessing-2.6.2.1.tar.gz 目測是支持python 2.x下運行的包, 而你的python 是3.x 要改為相應的版本才行

如下例中

$ python
Python 2.7.12 (default, Nov 20 2017, 18:23:56) 
>>> print 'test'
test

語法區(qū)別:

$ python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
>>> print 'test'
  File "<stdin>", line 1
    print 'test'
               ^
SyntaxError: Missing parentheses in call to 'print'

從 Python 2.6起, multiprocessing 是python的內(nèi)置模塊, 不需要用pip安裝.

笑忘初 回答

remote-method 在輸入值發(fā)生變化時調(diào)用,參數(shù)為當前輸入。
change 是在選中后才觸發(fā),
在 遠程搜索等類似的聯(lián)想功能,我覺得 還是避免不了頻繁調(diào)用接口,
這里可以使用 函數(shù)防抖 試試 高級函數(shù)技巧-函數(shù)防抖與節(jié)流[]

硬扛 回答

雖然不知道這個el-progress-circle是啥,但SVG中可以通過stroke="#0f0"來設(shè)置邊框顏色,試試:stroke="'#0f0'"


element-ui中的progress支持的顏色看起來是固定的,并且是通過status屬性來設(shè)置的。
如:綠色 success,紅色 exception
但修改完status之后,中間的進度會展示為x。
clipboard.png


hack方法

<el-progress class="test" type="circle" :percentage="0"></el-progress>

.test svg > path:first-of-type{
  stroke: red !important;
}

熊出沒 回答

github關(guān)鍵詞 cilpboard

墨小羽 回答

先掛個vConsole,看下有沒有什么報錯

焚音 回答

webpack 默認打包是不壓縮的。
所以提供一種思路:
1、加入壓縮插件UglifyJS
2、安裝npm install uglify-js -g
3、修改package.json中的打包命令:

"build": "webpack && uglifyjs --compress --mangle -- xxxxx.js"

xxxxx為webpack生成的文件名,注意空格。

爆扎 回答
  overflow: hidden
冷眸 回答

你沒有定義store去存數(shù)據(jù)嗎?

import { observable } from 'mobx';
class irr_state {
    @observable categoryId =  '';
}
const irrStore = new irr_state();
export default irrStore;

-----------------------------------------------------------------

@action selectProduct(){
     irrStore.categoryId = esult.dataRow.categoryId;
}

@action selectByCategory(){
     GoodsService.selectByCategory( irrStore.categoryId )
}