已經(jīng)自己寫了一個(gè)解析方法
/**
* 解析字符串為 Date 對(duì)象
* @param dateStr 日期字符串
* @param fmt 日期字符串的格式
* 目前僅支持使用 y(年),M(月),d(日),h(時(shí)),m(分),s(秒),S(毫秒)
*/
Date.of = function (dateStr, fmt) {
if (!dateStr) {
throw new Error('傳入的日期字符串不能為空!');
}
if (!fmt) {
throw new Error('傳入的日期字符串的自定義格式不能為空!');
}
/**
* 日期格式化對(duì)象
* @param name 日期格式的名稱
* @param format 日期的格式值
* @param value 格式化得到的值
* @constructor
*/
function DateFormat(name, format, value, index) {
this.name = name;
this.format = format;
this.value = value;
this.index = index;
}
//日期時(shí)間的正則表達(dá)式
const dateFormats = {
year: 'y{1,4}',
month: 'M{1,2}',
day: 'd{1,2}',
hour: 'h{1,2}',
minute: 'm{1,2}',
second: 's{1,2}',
milliSecond: 'S{1,3}'
};
//如果沒有格式化某項(xiàng)的話則設(shè)置為默認(rèn)時(shí)間
const defaultDateValues = {
year: '2001',
month: '01',
day: '01',
hour: '00',
minute: '00',
second: '00',
milliSecond: '000'
};
//保存對(duì)傳入的日期字符串進(jìn)行格式化的全部信息數(shù)組列表
const dateUnits = [];
for (const fmtName in dateFormats) {
const regExp = new RegExp(dateFormats[fmtName]);
if (regExp.test(fmt)) {
const matchStr = regExp.exec(fmt)[0];
const regexStr = String.fill('`', matchStr.length);
const index = fmt.indexOf(matchStr);
fmt = fmt.replaceAll(matchStr, regexStr);
dateUnits.push(new DateFormat(fmtName, String.fill('\\d', matchStr.length), null, index));
} else {
dateUnits.push(new DateFormat(fmtName, null, defaultDateValues[fmtName], -1));
}
}
//進(jìn)行驗(yàn)證是否真的是符合傳入格式的字符串
fmt = fmt.replaceAll('`', '\d');
if (!new RegExp(fmt).test(dateStr)) {
return null;
}
//進(jìn)行一次排序, 依次對(duì)字符串進(jìn)行截取
dateUnits.sort(function (a, b) {
return a.index - b.index;
});
for (var i = 0, length = dateUnits.length; i < length; i++) {
const format = dateUnits[i].format;
if (format == null) {
continue;
}
const matchDateUnit = new RegExp(format).exec(dateStr);
if (matchDateUnit !== null && matchDateUnit.length > 0) {
dateStr = dateStr.replace(matchDateUnit[0], '');
dateUnits[i].value = matchDateUnit[0];
}
}
//將截取完成的信息封裝成對(duì)象并格式化標(biāo)準(zhǔn)的日期字符串
const obj = dateUnits.toObject(function (item) {
return {
key: item.name,
value: item.value
};
});
const date = '{year}-{month}-{day} {hour}:{minute}:{second}:{milliSecond}'.format(obj);
try {
return new Date(date);
} catch (e) {
return null;
}
};
//下面是上面的 Date.of() 使用的一些輔助方法
/**
* 替換所有匹配exp的字符串為指定字符串
* @param exp 被替換部分的正則
* @param newStr 替換成的字符串
*/
String.prototype.replaceAll = function (exp, newStr) {
return this.replace(new RegExp(exp, "gm"), newStr);
};
/**
* 原型:字符串格式化
* @param args 格式化參數(shù)值
*/
String.prototype.format = function (args) {
var result = this;
if (arguments.length < 1) {
return result;
}
var data = arguments; // 如果模板參數(shù)是數(shù)組
if (arguments.length === 1 && typeof (args) === "object") {
// 如果模板參數(shù)是對(duì)象
data = args;
}
for (var key in data) {
var value = data[key];
if (undefined !== value) {
result = result.replaceAll("\\{" + key + "\\}", value);
}
}
return result;
};
/**
* 為 js 的 String 添加填充字符串的靜態(tài)方法
* @param item 填充的元素
* @param length 填充的長度
* @returns {string} 填充得到的字符串
*/
String.fill = function (item, length) {
var result = '';
for (var i = 0; i < length; i++) {
result += item;
}
return result;
};
/**
* js 數(shù)組轉(zhuǎn)換為一個(gè) Object 對(duì)象
* @param fn 轉(zhuǎn)換方法
* @returns {{}} 得到的 Object 對(duì)象
*/
Array.prototype.toObject = function (fn) {
const obj = {};
this.map(fn)
.forEach(function (item) {
obj[item.key] = item.value;
});
return obj;
};
嗯,順便也發(fā)了一篇 blog 呢
https://rxliuli.blogspot.com/...
https://github.com/Microsoft/... issue 鏈接,暫時(shí)沒有找到解決方案。我把自定義的樣式注釋掉了。
我給你圈出來
首先你要知道在一個(gè) React 組件中 this 指的是什么?
state, props你都無法使用的<div onClick="this.handlerClick.bind(this)"></div>
:: (我沒用過, 就不說了)總之建議你再學(xué)習(xí)下 bind, call, apply, react的 this 使用等知識(shí)
上面幾個(gè)處理都不完備,存在如果輸入數(shù)據(jù)不是排序則結(jié)果不正確的可能。
下面的處理其實(shí)也有一些可能的問題(數(shù)據(jù)可能不是期望的順序),但對(duì)輸入數(shù)據(jù)可以得出完備的結(jié)果
function fn(str){
var tmpObj={};
var newArr=[];
var arr = str.split(",");
arr.map(function(item){ //arr輸出到tmpObj對(duì)象
var itemA=item.split("-");
var key=itemA[0];
var v=itemA[1];
if(tmpObj[key]){ //判斷一個(gè)鍵值對(duì)象是否存在,不存在就初始化,否則就添加新值
tmpObj[key].push(v);
}else{
tmpObj[key]=[v];
}
});
//下面把tmpObj按要求轉(zhuǎn)化為數(shù)組
for( var key in tmpObj){
var tmpO={}
tmpO["name"]=key;
tmpO["nameIdx"]=[];
for(var i=0;i<tmpObj[key].length;i++){
tmpO["nameIdx"].push({"site":tmpObj[key][i]});
}
newArr.push(tmpO);
}
return newArr;
}
可能不是樓上需要的,還是下面符合要求
function s2a(str){
var arr=[];
var lastName='';
str.split(',').forEach(s=>{
const [name,site] = s.split('-');
var cit=arr[arr.length-1];
if(name!=lastName){
lastName=name;
cit={name,'nameIdx':[]};
arr.push(cit);
}
cit['nameIdx'].push({site});
});
return arr;
}在select標(biāo)簽中加上autocomplete="off"試試
使用WebClient,然后設(shè)置請(qǐng)求頭部的ContentType為application/x-www-form-urlencoded,再調(diào)用WebClient實(shí)例的UploadString()方法,如下:
string URI = "http://www.myurl.com/post.php";
string myParameters = "param1=value1¶m2=value2¶m3=value3";
using (WebClient wc = new WebClient())
{
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string HtmlResult = wc.UploadString(URI, myParameters);
}
更多解決方案,請(qǐng)參考:.NET/C#應(yīng)用程序開發(fā)中如何使用WebClient向指定的遠(yuǎn)程請(qǐng)求地址發(fā)送(POST)數(shù)據(jù)?
webapps/下的所有文件都可以刪掉,沒事的。刪掉host-manager和manager只是少了web端的管理界面而已,反正平時(shí)我?guī)缀跏遣挥玫模l(fā)布程序都是重啟tomcat,所以那倆web界面其實(shí)沒什么卵用。
bootstrap的版本問題~~唔,找了好久才發(fā)現(xiàn)guide又看錯(cuò)了
參考百度api 配置
自己寫了個(gè)div 定位在級(jí)聯(lián)選擇器的位置
在級(jí)聯(lián)選擇器的回調(diào)里 清空它的selectedOptions 給為tag在data里定義的name里push進(jìn)去 子集value
實(shí)現(xiàn)類似效果
SyntaxError: Invalid or unexpected token 很明顯是語法錯(cuò)誤,檢查一下你的 webpack 的配置文件 或者你把配置文件展示出來
根據(jù)商品id向數(shù)據(jù)庫進(jìn)行請(qǐng)求數(shù)據(jù)
意思就是向后端發(fā)送http請(qǐng)求嘛
axios.get('/api/goods/' + id)
.then(response => {
//后端返回給你商品數(shù)據(jù)
})一次獲取后將數(shù)據(jù)緩存,然后根據(jù)需求,是做分頁,還是滾動(dòng)加載。
listdir獲取的只是文件夾下的文件/文件夾, 並不能獲取其完整路徑, 而運(yùn)行時(shí)python只知道當(dāng)前的工作路徑(work directory), 所以輸出如你所見. 你可以os.chdir(directory)來重新定位工作路徑, 這樣就能按你所想的輸出了
props: {},
slot: ''
放到同級(jí)
問問題要有注意問明的明確性和信息對(duì)稱性。
明確性是指表明你在什么情況下遇到了什么什么問題,需要得到什么樣的幫助,你期望的過程或者結(jié)果是怎么樣的,而實(shí)際的過程和結(jié)果又是怎么樣的
信息對(duì)稱性是指……你在問問題的時(shí)候要清楚回答問題的人所了解的信息與你所了解的信息并不相同,比如,你在做什么,目的是什么,這些與問題直接相關(guān)的信息都應(yīng)該描述出來。
現(xiàn)在來說說你的問題……說實(shí)在的,我并不知道你想干什么,也不知道 .is_array === "false" 的時(shí)候相關(guān)的數(shù)據(jù)是什么樣子,甚至到底是 .is_array === "false" 還是根本就沒有 .is_array 這個(gè)屬性存在。
代碼中大量使用了連續(xù)引用屬性這種語法,比如 itemdata.content[i].value[key].value[...],這在閱讀代碼的時(shí)候很難理清關(guān)系,可以考慮適當(dāng)?shù)奶砑右恍┲虚g變量。像 array[array.length] = xxx 這種語法雖然沒有錯(cuò)誤,但在多層引用的情況下,直接使用 .push() 會(huì)讓代碼更簡潔易懂(當(dāng)然最好還是加中間變量)
從提供的信息來看, if 分支似乎沒有問題,問題出在 else 分支上,但是題中并沒有提到 else 分支上的相關(guān)信息(除了代碼),但純從代碼分析,首先得保證 itemdata.content[i].value[key].value 是個(gè)數(shù)組,才能用 .push(),如果它都不是一個(gè)數(shù)組,而是 null、undefined 甚至是一個(gè)對(duì)象,那 .push 多半是要報(bào)錯(cuò)的。從邏輯上來說,既然它本身不是數(shù)組或沒有數(shù)據(jù),是可以用 =[ ["", "", ""] ] 來代替 .push(["", "", ""]) 的
當(dāng)前函數(shù)可能會(huì)被new么,普通函數(shù)的話,直接忽略就好了
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。