我有一个数组,如:
var foo = [1, 2, 3, 4, 5];
Run Code Online (Sandbox Code Playgroud)
我想把它映射到:
var bar = [[1,2], [2,3], [3,4], [4,5], [5,1]];
Run Code Online (Sandbox Code Playgroud)
我不需要处理长度foo为0或1的场景.
我天真的做法是:
var foo = [1, 2, 3, 4, 5];
var bar = _.map(foo, function(value, index) {
return index < foo.length - 1 ? [value, foo[index + 1]] : [value, foo[0]];
});
console.log(bar);Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/lodash/3.10.1/lodash.js"></script>Run Code Online (Sandbox Code Playgroud)
我想知道是否有更明确的方式来表达这种映射.
目前有这个:
foreach (var series in Chart1.Series)
{
series.Enabled = false;
}
Run Code Online (Sandbox Code Playgroud)
我想用简单的一行表达来表达这一点.我认为这会奏效:
Chart1.Series.Select( series => series.Enabled = false);
Run Code Online (Sandbox Code Playgroud)
然而,这没有任何影响.大概是因为我误解了Select是如何工作的,这很好.
我的下一个想法是做一些像Chart1.Series.ForEach(series => series.Enabled = false),但Chart1.Series没有实现IEnumberable(..或至少ForEach不是一个可接受的方法来调用).
我宁愿不这样做Chart1.Series = Chart1.Series.ToList().ForEach( series => series.Enabled = false);,但也许这是最简单的选择?
目前有这个代码为对象的selectedID属性定义getter/setter.该对象称为组件.
_selectedID: null,
get SelectedID() {
return this._selectedID;
},
set SelectedID(val) {
if (!isNaN(val) && val != this._selectedID) {
this._notifyChanged(val);
this._selectedID = val;
}
},
Run Code Online (Sandbox Code Playgroud)
虽然这在浏览器知道如何处理生成的javascript的意义上有效,但Visual Studio声明存在语法警告.
这是说同样的事情的另一种方式,但缺乏前一个的OOPness:
(编辑:显然我可以在这里使用它而不是组件,所以'缺乏OOPness'并不是一个问题,但如果更好的话仍然很好奇).
function GetSelectedID() {
//return Components._selectedID;
return this._selectedID;
}
function SetSelectedID(val) {
//if (!isNaN(val) && val != Components._selectedID) {
//Components._notifyChanged(val);
//Components._selectedID = val;
//}
if (!isNaN(val) && val != this._selectedID) {
this._notifyChanged(val);
this._selectedID = val;
}
}
Object.defineProperty(Components, 'SelectedID', { get: GetSelectedID
, set: SetSelectedID
, configurable: true
, enumerable: true }); …Run Code Online (Sandbox Code Playgroud) 考虑以下JavaScript:
for (var i = 0; i < foo.length; i++) {
DoStuff(foo[i]);
}
for (var i = 0; i < bar.length; i++) {
DoStuff(bar[i]);
}
Run Code Online (Sandbox Code Playgroud)
作为一名来自C#背景的开发人员,这段代码对我来说似乎很好.不幸的是,此代码会使用Visual Studio生成警告.
消息1'i'已定义
好的,当然.很明显发生了什么 - 我的第一个声明并没有将我的范围限制在for循环的范围内.我可以做几件事:
for (var i = 0; i < foo.length; i++) {
DoStuff(foo[i]);
}
for (i = 0; i < bar.length; i++) {
DoStuff(bar[i]);
}
Run Code Online (Sandbox Code Playgroud)
我发现这个解决方案不正确,因为第二个for循环现在的'正确性'与第一个循环的'正确性'耦合 - 如果我删除第一个循环,第二个循环必须改变.或者:
for (var fooIndex = 0; i < foo.length; i++) {
DoStuff(foo[fooIndex]);
}
for (var barIndex = 0; barIndex < bar.length; barIndex++) {
DoStuff(bar[barIndex]); …Run Code Online (Sandbox Code Playgroud) 我想知道我应该采取什么样的方法来使这段代码按照预期的方式运行.API调用是异步的 - 因此构造函数在加载数据之前返回.
addSongById: function (songId) {
var song = new Song(songId);
console.log(song);
this.addSong(song);
if (this.songCount() == 1)
this.play();
UserInterface.refresh();
SongGrid.reload();
},
function Song(songId) {
$.getJSON('http://gdata.youtube.com/feeds/api/videos/' + songId + '?v=2&alt=json-in-script&callback=?', function (data) {
this.id = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); });
this.songId = songId;
this.url = "http://youtu.be/" + songId;
this.name = data.entry.title.$t;
});
}
Run Code Online (Sandbox Code Playgroud)
是否有可能强制构造函数不能过早返回?理想情况下,我不必将任意数量的参数传递给Song构造函数,并将仅与Song相关的信息带到其范围之外.
我正在向我的MVC控制器发送一组类似GUID的对象,如下所示:
$.ajax({
type: 'GET',
url: 'http://localhost:61975/Song/GetByIds',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: {
songIds: JSON.stringify(songIds)
},
success: function (data) {
},
error: function(error) {
console.error(error);
}
});
Run Code Online (Sandbox Code Playgroud)
我的请求标头中发送的数据如下所示:
songIds:[ "6cb44f55-9fd5-4540-9b11-75ccce816d67"]
我的MVC3控制器方法如下所示:
[HttpGet]
public ActionResult GetByIds(List<Guid> songIds)
{
SongManager songManager = new SongManager(SongDao, PlaylistDao, PlaylistItemDao);
IList<Song> songs = songManager.GetByIds(songIds);
return new JsonDataContractActionResult(songs);
}
Run Code Online (Sandbox Code Playgroud)
在这个实现中,我收到一个非null的List对象,但它总是为空.我的错是什么?
编辑:如果我像这样POST而不是GET它工作正常.怎么会??
$.ajax({
type: 'POST',
url: 'http://localhost:61975/Song/GetByIds',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({
songIds: songIds
}),
success: function (data) {
loadedSongs = loadedSongs;
if (callback) {
callback(data); …Run Code Online (Sandbox Code Playgroud) 我正在开发Google Chrome扩展程序.在这种环境中,我可以在请求适当的权限后将JavaScript注入第三方网站.因此,我将代码注入引用跨域资源的iframe,但不受与"普通"环境中预期相同的跨源安全策略的约束.
我在这个iframe中执行的代码是:
var requestId = window.requestAnimationFrame(function(){
console.log("Success");
});
console.log("Request Id:", requestId);
Run Code Online (Sandbox Code Playgroud)
执行此代码后,我的输出如下:
请求ID:1
requestAnimationFrame的回调永远不会被执行.requestAnimationFrame已定义.如果我使用非优化调用(如setInterval),则回调可以正常工作.
回调在iframe外部正确执行,但在iframe内部失败时,我的控制台中没有显示安全错误.这仅适用于最新版本的Google Chrome - 请不要担心requestAnimationFrame的其他实现.
我可以采取任何步骤来调试此问题吗?window.requestAnimationFrame落后于本机代码,我的requestId是有效的...所以我有点不知所措.
编辑:
以下是将此问题作为小型Google Chrome扩展程序重现的完整源代码:https://gist.github.com/MeoMix/37b4dbdbb3bd48f3c9e2
这是上面源代码的可下载zip:https://mega.co.nz/#!2BFA1agY!JSZC1BFBza3rU4LnqlZqcR9neZQRJn0yh1U6tu2GWo4
我正在注入一个这样的脚本:
var script = $('<script>', {
type: 'text/javascript',
async: true,
src: 'https://script.js'
});
$('script:first').before(script);
Run Code Online (Sandbox Code Playgroud)
这会生成如下标记:
<script type="text/javascript" async="async" src="https://script.js"></script>
Run Code Online (Sandbox Code Playgroud)
我更喜欢以下语法:
<script type="text/javascript" async src="https://script.js"></script>
Run Code Online (Sandbox Code Playgroud)
将选项传递给jQuery DOM元素创建者时是否支持此功能?或者,我应该使用纯JavaScript来实现这一目标吗?
我有一堂课,看起来像:
public class WidgetDao : AbstractDao<Widget>, IWidgetDao
{
public WidgetDao(ISession session)
: base (session)
{
}
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试在代码中删除此构造函数,我的代码会出现构建错误,如下所示:
public IWidgetDao GetWidgetDao()
{
return _widgetDao ?? (_widgetDao = new WidgetDao(_session));
}
Run Code Online (Sandbox Code Playgroud)
我有点理解为什么我收到构建错误的原因...没有WidgetDao带有一个参数的显式构造函数。然而,WidgetDao继承AbstractDao<Widget>它确实有一个带有一个参数的构造函数。
我不明白为什么 C# 编译器会在WidgetDao其用途是将参数传递给基类时要求显式构造函数。
有人可以帮我解释一下吗?
List<CormantRadPane> panesToSave = new List<CormantRadPane>();
foreach (KeyValuePair<string, RadPaneSetting> paneState in RadControlStates.PaneStates)
{
CormantRadPane pane = Utilities.FindControlRecursive(Page, paneState.Key) as CormantRadPane;
panesToSave.Add(pane);
}
foreach (CormantRadPane pane in panesToSave)
{
RadControlSave.SavePane(pane);
}
Run Code Online (Sandbox Code Playgroud)
RadControlSave.SavePane(窗格)修改RadControlStates.PaneStates集合.在这种情况下编写此代码有更好的方法吗?
编辑:每个人都请阅读我在字面上写的内容.Jimmy发布了一个我没有的明显解决方案 - 在迭代之前创建集合的副本,以便RadControlSave不会修改正在迭代的集合.
javascript ×6
c# ×4
jquery ×4
constructor ×2
ajax ×1
asynchronous ×1
callback ×1
cross-domain ×1
get ×1
iframe ×1
json ×1
linq ×1
lodash ×1
oop ×1
scope ×1
set ×1